/
asyncjabbercomponent.py
64 lines (50 loc) · 2.35 KB
/
asyncjabbercomponent.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from pyxmpp.jabberd.component import Component
from pyxmpp.all import JID, Presence
from pyxmpp.jabber.client import JabberClient
from pyxmpp.jabber.muc import MucRoomState, MucRoomManager, MucRoomHandler
from pyxmpp import streamtls
class AsyncJabberComponent(Component):
def __init__(self, jid, secret, server, port, **options):
if not isinstance(jid, JID):
jid = JID(jid)
kwargs = {
'disco_name':"pyjirc",
'disco_category':"x-service",
'disco_type':"bridge",
}
kwargs.update(options)
Component.__init__(self, jid, secret, server, port, **kwargs)
self.disco_info.add_feature("jabber:iq:version")
def tick(self, timeout=1):
stream = self.get_stream()
if not stream:
return -1
ret = stream.loop_iter(timeout)
if not ret:
self.idle()
def stream_state_changed(self,state,arg):
"""This one is called when the state of stream connecting the component
to a server changes. This will usually be used to let the administrator
know what is going on."""
print "*** State changed: %s %r ***" % (state,arg)
def authenticated(self):
Component.authenticated(self)
handle_presence = getattr(self, 'handle_presence', None)
if callable(handle_presence):
self.stream.set_presence_handler("available", handle_presence)
self.stream.set_presence_handler("unavailable", handle_presence)
handle_subscribe = getattr(self, 'handle_subscribe', None)
if callable(handle_subscribe):
self.stream.set_presence_handler("subscribe", handle_subscribe)
self.stream.set_presence_handler("subscribed", handle_subscribe)
self.stream.set_presence_handler("unsubscribe", handle_subscribe)
self.stream.set_presence_handler("unsubscribed", handle_subscribe)
handle_error = getattr(self, 'handle_error', None)
if callable(handle_error):
self.stream.set_presence_handler("error", handle_error)
handle_message = getattr(self, 'handle_message', None)
if callable(handle_message):
self.stream.set_message_handler('normal', handle_message)
handle_connect = getattr(self, 'handle_connect', None)
if callable(handle_connect):
handle_connect()