2012-06-21 8 views
16

Sto usando una libreria di memoria per comunicare con il server xmpp remoto. Sono in grado di inviare/ricevere messaggi, ma voglio ottenere il timestamp del messaggio in arrivo.Come ottenere il timestamp del messaggio in arrivo xmpp?

Potrebbe dirmi per favore, è possibile a tutti? Perché non riesco a trovare nulla su questa domanda. attributo

Grazie in anticipo

+0

u ha ottenuto alcun im soluzione problema sm fronte – CoronaPintu

risposta

11

La registrazione data/ora non fa parte dei messaggi regolari. Quindi non puoi estrarlo.

Esiste una specifica (come menzionato da @Dmitry), ma si applica solo a tipi specifici di messaggi. In genere quelli che NON sono in tempo reale, come offline e che pubblicano l'ultimo messaggio pubsub di un nodo quando viene creato un nuovo abbonamento. Questi sono messaggi con un ritardo intrinseco incorporato in essi.

9

a causa del tempo specifiche sono necessari per il messaggio XMPP:

http://xmpp.org/extensions/xep-0203.html#protocol

Controllare il <delay oggetto di <message:

<delay xmlns='urn:xmpp:delay' 
from='capulet.com' 
stamp='2002-09-10T23:08:25Z'> 
Offline Storage 
</delay> 

Ma ottenere sembra un un po 'complicato Non appena aSmack viene ricompilato Smack con alcune cose sostituiti, in modo da cercare di ottenere nel modo come qui:

http://edwin.baculsoft.com/2011/06/how-to-get-offline-messages-timestamp-on-openfire/

DelayInformation inf = null; 
try { 
    inf = (DelayInformation)packet.getExtension("x","jabber:x:delay"); 
} catch (Exception e) { 
    log.error(e); 
} 
// get offline message timestamp 
if(inf!=null) 
    Date date = inf.getStamp(); 

problably, è necessario controllare che cosa server invia con il messaggio come valore di estensione e sostituire "jabber:x:delay" con 'urn:xmpp:delay' come mostrato nell'esempio delle specifiche XMPP.

Ma non sono sicuro che funzioni.

+0

Si prega di don dimentica di segnare la risposta se funzionerà. – Dmitry

+0

Purtroppo non è stato d'aiuto, ma sono molto apprezzato per il vostro aiuto – Infernus

+3

Questa risposta è errata, poiché il protocollo menzionato si applica solo ai messaggi in situazioni specifiche in cui i messaggi sono di natura storica. Non si applica alla domanda dell'OP (messaggi in generale), in quanto non è supportata in XMPP. – Robin

4

Anche se in parte una miscela delle altre risposte già qui, vorrei presentare la risposta come segue ...

XMPP è "in tempo reale" ... anche se questo termine può significare molte cose diverse per diverse le persone, in generale, si può presumere che si ricevono messaggi (quasi) non appena vengono inviati - tutto il software XMPP è progettato per soddisfare questo obiettivo.

Tuttavia non esiste alcuna garanzia effettiva sulla latenza end-to-end. Nella pratica generale di solito riceverai un messaggio molto meno di un secondo dopo che è stato trasmesso dal mittente, sebbene le condizioni della rete possano influire su questo.

In alcuni casi il messaggio verrà temporaneamente ritardato, ad esempio quando è necessario stabilire una nuova connessione server-to-server. Questo può richiedere alcuni secondi in genere, a seconda delle condizioni della rete e del metodo di autenticazione utilizzato tra i server.

Un messaggio può anche essere trattenuto se il destinatario non è in linea - il server del destinatario può contenere il messaggio in un archivio "messaggio offline", finché non lo può recapitare quando il destinatario è in linea.

A causa della consegna generale istantanea dei messaggi XMPP, i timestamp generalmente non sono inclusi nel messaggio stesso, in quanto tali informazioni sono inutili (e presuppongono che gli orologi siano tutti corretti).

Nei casi in cui il messaggio sia intenzionalmente ritardato, come negli esempi precedenti, l'entità che ritarda il messaggio può inserire un tag nel messaggio che indica l'ora originale del messaggio. Questo è dettagliato in XEP-0203: Delayed Delivery.

+0

. Alcuni server come OpenFire utilizzano XEP-0203 quando inviano la cronologia chat. –

0

Con schiaffo versione 4.2.0-RC2-SNAPSHOT è facile accesso,

DelayInformation delayInformation = forwarded.getDelayInformation(); 
delayInformation.getStamp().getTime(); 
2

Si lavora anche per 4.1.9

 
DelayInformation inf = null; 
        inf = (DelayInformation)message.getExtension(DelayInformation.ELEMENT,DelayInformation.NAMESPACE); 
        if (inf != null){ 
         Date date = inf.getStamp(); 
         System.out.println("date: "+date); 
        }