2016-03-22 10 views
4

Yalnızca geçmişte iletileri aldığım kullanıcıların çevrimiçi/çevrimdışı durumunu bulmam gereken bir uygulama yapıyorum. Sunucudaki tüm kullanıcılar değil. Şimdiden teşekkürler.XMPP sunucusu üzerinden özel kullanıcı çevrimiçi/çevrimdışı durumunun varlığı nasıl kontrol edilir

+0

Merhaba, ben aynı şeyi uygulamak istiyorum. Didi bunun için bir çözüm buldun mu? Eğer evet ise lütfen bana bildirin. Teşekkürler. – nikBhosale

+0

@nikBhosale Belirli kullanıcının çevrimiçi/çevrimdışı durumunu almıyorum. Öyleyse yaptığım şey, bir kullanıcının çevrimiçi/çevrimdışı durumunu bir dizide saklamak ve Jabber kimliği temelinde durum göstermek istediğim kullanıcılar için bu diziyi filtrelemek. –

+0

Tamam, ama dizinizi sürekli dinleme ve düzenleme modunda tutmanız gerektiğinden daha az verimli olacağını düşünüyorum. Bunun yerine XMPPIQ kullanarak cevabıma bakabilirsiniz. Ayrıca, doğru yol olduğunu düşünüyorsanız lütfen bunu da belirtin. Teşekkürler. – nikBhosale

cevap

0

Varlıklar yayınlanır, böylece "gerçekleştiğinde" onları alırsınız. Uzak sunucu (S2S, sunucudan sunucu) bağlamında varlık probları vardır. Ama yoklama yok.

1

-Sen XMPPIQ Sen

let query = XMLElement(name: "query", xmlns: "jabber:iq:last") 
     let streamUUID = self.xmppStream.generateUUID() 
     let iq = XMPPIQ(type: "get", to: XMPPJID(string: jid) , elementID: streamUUID , child: query) 
     self.xmppStream.send(iq) 
     return streamUUID! 

şöyle 'türü, get' ile XMPPIQ oluşturmak için gereken kullanarak belirli bir kullanıcının çevrimiçi/çevrimdışı durumlarını alabilirsiniz sonra adlandırılmış XMPPStreamDelegate protokolünde temsilci yöntemi yoktur 'didReceive iq:', aşağıdaki gibi thi smethod tanıtıcı IQ sonucu sağlamak gerekir,

func xmppStream(_ sender: XMPPStream!, didReceive iq: XMPPIQ!) -> Bool { 
     if iq.isResultIQ() { 
      iq.lastActivitySeconds() == 0{ 
       print("user is online") 
      }else{ 
       print("user is offline") 
      } 
     } 
     return false 
    } 
İlgili konular