Added more intelligence to IrcMsgQueue

This commit is contained in:
Jeremy Fincher 2003-04-02 09:07:52 +00:00
parent 75768aa524
commit d7e3b18046
1 changed files with 21 additions and 9 deletions

View File

@ -92,13 +92,15 @@ class IrcCallback(object):
class IrcMsgQueue(object): class IrcMsgQueue(object):
"""Class for a queue of IrcMsgs. Eventually, it should be smart. """Class for a queue of IrcMsgs. Eventually, it should be smart.
""" """
__slots__ = ('msgs', 'queue') __slots__ = ('msgs', 'modes', 'kicks', 'lowpriority')
def __init__(self): def __init__(self):
self.reset() self.reset()
def reset(self): def reset(self):
self.modes = queue()
self.kicks = queue()
self.lowpriority = queue()
self.msgs = set() self.msgs = set()
self.queue = []
def enqueueMsg(self, msg): def enqueueMsg(self, msg):
if msg in self.msgs: if msg in self.msgs:
@ -106,18 +108,28 @@ class IrcMsgQueue(object):
debug.debugMsg('Not adding msg %s to queue' % msg, 'normal') debug.debugMsg('Not adding msg %s to queue' % msg, 'normal')
else: else:
self.msgs.add(msg) self.msgs.add(msg)
self.queue.append(msg) if msg.command == 'MODE':
self.modes.enqueue(msg)
elif msg.command == 'KICK':
self.kicks.enqueue(msg)
else:
self.lowpriority.enqueue(msg)
def dequeueMsg(self): def dequeueMsg(self):
if self.queue: if self.modes:
msg = self.queue.pop(0) msg = self.modes.dequeue()
self.msgs.remove(msg) elif self.kicks:
return msg msg = self.kicks.dequeue()
elif self.lowpriority:
msg = self.lowpriority.dequeue()
else: else:
return None msg = None
if msg:
self.msgs.remove(msg)
return msg
def empty(self): def empty(self):
return self.queue == [] return not (self.modes or self.kicks or self.lowpriority)
### ###