Frage

ich habe ein Problem mit einer Anwendung verwendet Smack 3.1 und einem Server mit Openfire. Nach dem Start der Anwendung, wird es die letzte Nachricht auf dem Knoten lesen. Das funktioniert nicht, da die Nachrichten analysiert, verarbeitet und in eine db gesetzt. Neben einer Nachricht Erstellungszeit in der Nutzlast zu senden, ist es eine Möglichkeit, diese Vervielfältigung zu stoppen? (Eigentlich, wenn es trotzdem zu Signal ist, dass eine Nachricht „verbraucht“ wurde wäre fantastisch)

War es hilfreich?

Lösung

Wenn Sie beziehen dann auf PubSub können Sie entweder den Knoten so konfigurieren, dass keine Gegenstände nicht bestehen bleiben mit persist_items und max_items.

Wenn Sie keine Kontrolle über die Erstellung von Knoten haben dann was Sie tun können, ist Prüfung für die Verzögerung Namensraum (jabber:x:delay und / oder urn:xmpp:delay) in dem Paket

public void processPacket(Packet pkt) {
   DelayInformation delay = (DelayInformation)pkg.getExtension("x", "jabber:x:delay");
   if (delay != null)
      return; //Discard this packet
   delay = (DelayInformation)pkg.getExtension("x", "urn:xmpp:delay");
   if (delay != null)
      return; //Discard this as well
   //Otherwise this is a good packet
   ...
}

Sie können auch einige Entscheidung durch das DelayInformation Objekt untersuchen, wie lange, Vernunft usw.

Wenn es PEP ist dann erhalten Sie immer das letzte Element veröffentlicht und ich denke, es gibt keine Möglichkeit zu bestimmen, ob es nämlich verzögert wurde. es gibt keine Verzögerung Info im Paket.

Sie müssen entweder get Nightly Builds oder Ihre eigene für PubSub Unterstützung bauen. Ich glaube nicht, die aktuelle Version 3.1.0 Smack supoorts PubSub.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top