Changeset 58
- Timestamp:
- 02/15/04 12:08:26 (5 years ago)
- Files:
-
- trunk/jjigw.py (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/jjigw.py
r56 r58 14 14 import Queue 15 15 import time 16 from types import StringType,UnicodeType 16 17 17 18 from pyxmpp import ClientStream,JID,Iq,Presence,Message,StreamError … … 170 171 self.doc.freeDoc() 171 172 173 174 class Request: 175 def __init__(self,command,stanza,args=None): 176 self.command=command 177 self.stanza=stanza 178 self.args=args 179 def match(self,commands,args=None): 180 if type(commands) in (StringType,UnicodeType): 181 commands=[commands] 182 for c in commands: 183 if not self.command==c: 184 continue 185 if args and not self.args==args: 186 continue 187 return 1 188 return 0 189 190 class RequestQueue: 191 def __init__(self,maxsize): 192 self.maxsize=maxsize 193 self.requests=[] 194 def get(self,commands,args=None): 195 for r in self.requests: 196 if r.match(commands): 197 try: 198 self.requests.remove(r) 199 except ValueError: 200 pass 201 return r 202 return None 203 def add(self,command,stanza,args=None): 204 r=Request(command,stanza,args) 205 self.requests.append(r) 206 if len(self.requests)>10: 207 self.requests=self.requests[-10:] 208 172 209 class IRCUser: 173 210 def __init__(self,session,nick,user="",host=""): … … 289 326 self.users=[] 290 327 self.muc=0 291 self.requests=[] 292 293 def get_request(self,commands): 294 for command,stanza in self.requests: 295 if command in commands: 296 try: 297 self.requests.remove((command,stanza)) 298 except ValueError: 299 pass 300 return command,stanza 301 return None,None 302 303 def add_request(self,command,stanza): 304 self.requests.append((command,stanza.copy())) 305 if len(self.requests)>10: 306 self.requests=self.requests[-10:] 328 self.requests=RequestQueue(10) 307 329 308 330 def sync_user(self,user,status=None): … … 338 360 self.debug("Joining channel %r" % (self.name,)) 339 361 self.session.send("JOIN %s" % (self.name,)) 340 self. add_request("JOIN",stanza)362 self.requests.add("JOIN",stanza) 341 363 self.state="join" 342 364 if stanza.get_join_info(): … … 465 487 466 488 def irc_error_response(self,prefix,command,params,requests,condition): 467 command,stanza=self. get_request(requests)489 command,stanza=self.requests.get(requests) 468 490 if command: 469 491 m=stanza.make_error_response(condition) … … 484 506 485 507 def irc_cmd_TOPIC(self,prefix,command,params): 486 self. get_request(("TOPIC",))508 self.requests.get("TOPIC") 487 509 topic=remove_evil_characters(params[1]) 488 510 m=Message(fr=self.prefix_to_jid(prefix),to=self.session.jid, … … 580 602 self.session.user.sync_delay-=1 581 603 self.state="joined" 582 self. get_request(("JOIN",))604 self.requests.get("JOIN") 583 605 self.session.send("MODE %s" % (self.name,)) 584 606 self.session.send("WHO %s" % (self.name,)) … … 612 634 0) 613 635 user.leave_channel(self,status=307) 636 if user and self.session.check_prefix(prefix): 637 r=self.requests.get("KICK",user.nick) 638 if r: 639 iq=r.stanza.make_result_response() 640 self.session.component.send(iq) 614 641 615 642 def irc_cmd_PRIVMSG(self,prefix,command,params): … … 642 669 topic=topic.replace("\n"," ").replace("\r"," ") 643 670 self.session.send("TOPIC %s :%s" % (self.name,topic)) 644 self. add_request("TOPIC",stanza)671 self.requests.add("TOPIC",stanza) 645 672 646 673 def kick_user(self,nick,reason,stanza): 647 674 self.session.send("KICK %s %s :%s" % (self.name,nick,reason)) 648 self. add_request("KICK",stanza)675 self.requests.add("KICK",stanza,nick) 649 676 650 677 def __repr__(self):
