Smack Lesen alter Veranstaltungen
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)
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.