2012-06-21 15 views
16

मैं दूरस्थ xmpp सर्वर के साथ संवाद करने के लिए एक स्मेक लाइब्रेरी का उपयोग कर रहा हूं। मैं संदेश भेजने/प्राप्त करने में सक्षम हूं, लेकिन मैं आने वाले संदेश का टाइमस्टैम्प प्राप्त करना चाहता हूं।आने वाले xmpp संदेश का टाइमस्टैम्प कैसे प्राप्त करें?

क्या आप मुझे बता सकते हैं, क्या यह संभव है? क्योंकि मुझे इस सवाल के बारे में कुछ भी नहीं मिला है। XMPP संदेश के लिए चश्मा समय के कारण अग्रिम

+0

यू किसी भी समाधान एसएम मुद्दा – CoronaPintu

उत्तर

11

टाइमस्टैम्प नियमित संदेशों का हिस्सा नहीं है। इसलिए आप इसे निकालने नहीं कर सकते हैं।

एक spec (जैसा कि @Dmitry द्वारा उल्लिखित है) है, लेकिन यह केवल विशिष्ट प्रकार के संदेशों पर लागू होता है। आमतौर पर वे लोग जो रीयलटाइम नहीं हैं, जैसे ऑफ़लाइन और नोड के आखिरी पबब संदेश को प्रकाशित करते समय एक नई सदस्यता बनाई जाती है। ये संदेश हैं जो उनमें अंतर्निहित देरी के साथ हैं।

9

में

धन्यवाद की आवश्यकता है विशेषता:

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

<message की <delay आइटम की जाँच करें:

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

लेकिन यह एक लग रहा है हो रही है थोड़ा मुश्किल जैसे ही aSmack कुछ बदल दिया सामान के साथ स्मैक कंपाइल, इसलिए यहाँ है कि यह जिस तरह से प्राप्त करने की कोशिश कर रहा है: problably

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(); 

, तुम क्या सर्वर विस्तार मूल्य के रूप में संदेश के साथ भेजता है की जाँच करने की आवश्यकता होगी और "jabber:x:delay" को 'urn:xmpp:delay' के साथ प्रतिस्थापित करें क्योंकि यह एक्सएमपीपी चश्मा उदाहरण में दिखाया गया है।

लेकिन यह सुनिश्चित नहीं है कि यह काम करता है।

+0

का सामना करना पड़ डॉन कृपया im मिल काम करता है अगर काम करेगा तो जवाब को चिह्नित करना न भूलें। – Dmitry

+0

दुर्भाग्य से यह मदद नहीं करता है, लेकिन आपकी मदद के लिए आपकी बहुत सराहना की गई है – Infernus

+3

यह उत्तर गलत है, क्योंकि उल्लिखित प्रोटोकॉल केवल विशिष्ट परिस्थितियों में संदेशों पर लागू होता है जहां संदेश प्रकृति में ऐतिहासिक हैं। यह ओपी के प्रश्न (सामान्य रूप से संदेश) पर लागू नहीं होता है, क्योंकि यह एक्सएमपीपी में समर्थित नहीं है। – Robin

4

हालांकि भाग में पहले से ही यहाँ अन्य उत्तर का एक मिश्रण है, मैं इस सवाल का जवाब इस प्रकार प्रस्तुत करते हैं ...

XMPP "वास्तविक समय" है ... हालांकि उस शब्द के विभिन्न करने के लिए अलग अलग बातें की एक बहुत कुछ मतलब हो सकता है लोग, आम तौर पर आप सुरक्षित रूप से यह मान सकते हैं कि जैसे ही वे भेजे जाते हैं, आपको संदेश (लगभग) प्राप्त होते हैं - सभी एक्सएमपीपी सॉफ़्टवेयर को इस लक्ष्य को पूरा करने के लिए डिज़ाइन किया गया है।

हालांकि अंत-टू-एंड विलंबता के बारे में कोई वास्तविक गारंटी नहीं है। सामान्य अभ्यास में आप आमतौर पर प्रेषक द्वारा प्रेषित होने के बाद एक सेकंड से भी कम संदेश प्राप्त करेंगे, हालांकि नेटवर्क की स्थिति इस पर प्रभाव डाल सकती है।

कुछ मामलों में संदेश अस्थायी रूप से देरी हो जाएगी, जैसे कि जब कोई नया सर्वर-टू-सर्वर कनेक्शन स्थापित करने की आवश्यकता होती है। नेटवर्क स्थितियों और सर्वर्स के बीच प्रयुक्त प्रमाणीकरण की विधि पर निर्भर करते हुए, इसमें आमतौर पर कुछ सेकंड तक लग सकते हैं।

प्राप्तकर्ता ऑफ़लाइन होने पर भी एक संदेश आयोजित किया जा सकता है - प्राप्तकर्ता का सर्वर "ऑफ़लाइन संदेश" स्टोर में संदेश रख सकता है, जब तक कि प्राप्तकर्ता ऑनलाइन न हो जाए।

एक्सएमपीपी संदेशों की सामान्य तत्काल डिलीवरी के कारण, टाइमस्टैम्प आम तौर पर संदेश में शामिल नहीं होते हैं, क्योंकि यह जानकारी बेकार है (और लगता है कि घड़ियों सभी सही हैं)।

ऐसे मामलों में जहां संदेश जानबूझकर देरी हो रही है, जैसे ऊपर दिए गए उदाहरणों में, संदेश में देरी करने वाली इकाई संदेश के मूल समय को इंगित करने वाले संदेश में एक टैग डाल सकती है। यह XEP-0203: Delayed Delivery में विस्तृत है।

+0

प्राप्त करना चाहता हूं। ओपनफायर जैसे कुछ सर्वर चैट इतिहास भेजते समय XEP-0203 का उपयोग करते हैं। –

0
स्मैक 4.2.0-rc2-SNAPSHOT संस्करण के साथ

यह उपयोग करने के लिए आसान है,

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

यह भी के लिए 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); 
        } 
संबंधित मुद्दे