def upgradeWithIQResponseTracker(xmlstream): """ Enhances an XmlStream for iq response tracking. This makes an L{XmlStream} object provide L{IIQResponseTracker}. When a response is an error iq stanza, the deferred has its errback invoked with a failure that holds a L{StanzaException<error.StanzaException>} that is easier to examine. """ def callback(iq): if getattr(iq, 'handled', False): return try: d = xmlstream.iqDeferreds[iq["id"]] except KeyError: pass else: del iq["id"] iq.handled = True if iq['type'] == 'error': d.errback(failure.Failure(error.exceptionFromStanza(iq))) else: d.callback(iq) xmlstream.iqDeferreds = {} xmlstream.addObserver('/iq[@type="result"]', callback) xmlstream.addObserver('/iq[@type="error"]', callback) directlyProvides(xmlstream, IIQResponseTracker)
def authd(self, xmlstream): self.logger.log("INFO", "Authenticating with Jabber server.") self.xmlstream = xmlstream presence = domish.Element(('jabber:client','presence')) xmlstream.send(presence) xmlstream.addObserver('/message', self.debug) xmlstream.addObserver('/presence', self.debug) xmlstream.addObserver('/iq', self.debug) xmlstream.addObserver('/iq', self.pong) xmlstream.addObserver('/message', self.gotMessage)
def authd(self, xmlstream): self.logger.log("INFO", "Authenticating with Jabber server.") self.xmlstream = xmlstream presence = domish.Element(('jabber:client', 'presence')) xmlstream.send(presence) xmlstream.addObserver('/message', self.debug) xmlstream.addObserver('/presence', self.debug) xmlstream.addObserver('/iq', self.debug) xmlstream.addObserver('/iq', self.pong) xmlstream.addObserver('/message', self.gotMessage)
def authd(self, xmlstream): # need to send presence so clients know we're # actually online. presence = domish.Element(('jabber:client', 'presence')) presence.addElement('status').addContent('Online') xmlstream.send(presence) # add a callback for the messages xmlstream.addObserver('/message', self.gotMessage) self.xmlstream = xmlstream
def authd(xmlstream): global _xmlstream logger.debug("authenticated") _xmlstream = xmlstream presence = domish.Element(('jabber:client', 'presence')) presence.addElement('status').addContent('Online') xmlstream.send(presence) # add a callback for the messages -- need to handle subscribe xmlstream.addObserver('/presence', gotPresence) reactor.stop() # stop the reactor.. so we can use iterate instead.
def authd(self, xmlstream): self.thexmlstream = xmlstream self.statusListener("System", "Logged in") #need to send presence so clients know we're #actually online presence = domish.Element(('jabber:client', 'presence')) presence.addElement('status').addContent('Online') xmlstream.send(presence) xmlstream.addObserver('/message', self.gotMessage) xmlstream.addObserver('/presence', self.gotPresence) xmlstream.addObserver('/iq', self.gotIq) xmlstream.addObserver('/*', self.debug) self.joinChatroom(self.teamChat) self.joinChatroom(self.globalChat)
def onConnect(self,xmlstream): print "auth" self.active = True self.xs=xmlstream self.informer._addClient(self) presence = domish.Element(('jabber:client','presence')) presence.addElement('priority').addContent("100") presence.addElement("show", None, ":)") presence.addElement('status').addContent('Online') xmlstream.send(presence) xmlstream.addObserver('/iq', self.onIq) xmlstream.addObserver('/message', self.onMessage) xmlstream.addObserver('/presence', self.onPresence) xmlstream.addObserver('/presence[@type="unsubscribe"]', self.onPresenceUnsubscribe) xmlstream.addObserver('/presence[@type="unsubscribed"]', self.onPresenceUnsubscribed) xmlstream.addObserver('/presence[@type="subscribe"]', self.onPresenceSubscribe) xmlstream.addObserver('/iq/query[@xmlns="jabber:iq:roster"]',self.onRoster) xmlstream.addObserver('/iq/query[@xmlns="jabber:iq:version"]',self.onVersion) xmlstream.addObserver('/iq/time[@xmlns="urn:xmpp:time"]', self.onTime) xmlstream.addObserver('/iq/query/item[@subscription="remove"]', self.onRemove) xmlstream.addObserver('/message[@type="chat"]/body', self.onChat) xmlstream.addObserver('/message[@type="error"]/error', self.onError) iq = component.xmlstream.IQ(xmlstream, 'get') iq['type'] = 'get' query = iq.addElement('query') query['xmlns']='jabber:iq:roster' iq.send() """ keep-alive """ lc = LoopingCall(xmlstream.send, ' ') xmlstream.addObserver('//event/stream/end', lambda _: lc.stop()) lc.start(60)