comparison bot.py @ 51:2737ed5b9003

Tried to improve the XMPP loop, again. Signed-off-by: Charly COSTE <changaco@changaco.net>
author Charly COSTE <changaco@changaco.net>
date Tue, 25 Aug 2009 14:38:30 +0200
parents dbb7c29a71e2
children 5aabf124c78d
comparison
equal deleted inserted replaced
50:dbb7c29a71e2 51:2737ed5b9003
28 from bridge import * 28 from bridge import *
29 from time import sleep 29 from time import sleep
30 import re 30 import re
31 import sys 31 import sys
32 import xml.parsers.expat 32 import xml.parsers.expat
33 import traceback
33 34
34 35
35 class bot(Thread): 36 class bot(Thread):
36 37
37 def __init__(self, jid, password, nickname, error_fd=sys.stderr, debug=False): 38 def __init__(self, jid, password, nickname, error_fd=sys.stderr, debug=False):
71 72
72 def _xmpp_loop(self): 73 def _xmpp_loop(self):
73 """[Internal] XMPP infinite loop.""" 74 """[Internal] XMPP infinite loop."""
74 while True: 75 while True:
75 try: 76 try:
76 try: 77 if len(self.xmpp_connections) == 1:
77 if len(self.xmpp_connections) == 1: 78 sleep(0.5) # avoid bot connection being locked all the time
78 sleep(0.5) # avoid bot connection being locked all the time 79 for c in self.xmpp_connections.itervalues():
79 for c in self.xmpp_connections.itervalues(): 80 if hasattr(c, 'lock'):
80 c.lock.acquire() 81 c.lock.acquire()
81 if c in self.xmpp_connections.itervalues(): 82 if c in self.xmpp_connections.itervalues():
82 if hasattr(c, 'Process'): 83 if hasattr(c, 'Process'):
83 c.Process(0.01) 84 c.Process(0.01)
84 c.lock.release() 85 c.lock.release()
85 except RuntimeError: 86 except RuntimeError:
86 pass 87 pass
87 except (xml.parsers.expat.ExpatError, xmpp.protocol.XMLNotWellFormed): 88 except (xml.parsers.expat.ExpatError, xmpp.protocol.XMLNotWellFormed):
88 self.error('=> Debug: received invalid stanza', debug=True) 89 self.error('=> Debug: received invalid stanza', debug=True)
89 continue 90 continue
91 except:
92 self.error('[Error] Unkonwn exception on XMPP thread:')
93 traceback.print_exc()
90 94
91 95
92 def _xmpp_presence_handler(self, dispatcher, presence): 96 def _xmpp_presence_handler(self, dispatcher, presence):
93 """[Internal] Manage XMPP presence.""" 97 """[Internal] Manage XMPP presence."""
94 98