root/branches/gajim_0.4.1/common/hub.py

Revision 359, 3.0 kB (checked in by asterix, 4 years ago)

update my email adress
update copyright
add missing headers

  • Property svn:keywords set to LastChangedDate LastChangedRevision LastChangedBy HeadURL Id
Line 
1##      common/hub.py
2##
3## Gajim Team:
4##      - Yann Le Boulanger <asterix@lagaule.org>
5##      - Vincent Hanquez <tab@snarc.org>
6##
7##      Copyright (C) 2003-2005 Gajim Team
8##
9## This program is free software; you can redistribute it and/or modify
10## it under the terms of the GNU General Public License as published
11## by the Free Software Foundation; version 2 only.
12##
13## This program is distributed in the hope that it will be useful,
14## but WITHOUT ANY WARRANTY; without even the implied warranty of
15## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16## GNU General Public License for more details.
17##
18
19import Queue
20import common.plugin
21import common.thread
22
23""" Hub definitions """
24
25class GajimHub:
26        def __init__(self):
27                self.queues = {}
28                # {event1:[queue1, queue2]}
29                self.events = {}
30                self.queueIn = self.newQueue('in', 100)
31                self.saveQueue = Queue.Queue(100)
32                self.events_to_store = ['WARNING', 'MSG', 'MSGERROR', 'SUBSCRIBED', 'UNSUBSCRIBED', 'SUBSCRIBE']
33                self.queue_to_send = None
34        # END __init__
35
36        def newQueue(self, name, size):
37                """ Creates a new queue """
38                qu = Queue.Queue(size)
39                self.queues[name] = qu
40                return qu
41        # END newQueue
42
43        def newPlugin(self, name):
44                """Creates a new Plugin """
45                if name in self.queues.keys():
46                        return 0
47                qu = self.newQueue(name, 100)
48                pl = common.plugin.GajimPlugin(name, qu, self.queueIn)
49                return pl
50        # END newPlugin
51
52        def register(self, name, event):
53                """ Records a plugin from an event """
54                if not self.queues.has_key(name):
55                        return
56                qu = self.queues[name]
57                if event == 'VISUAL' and not self.saveQueue.empty():
58                        # we save the queue in whitch we must send saved events
59                        # after the roster is sent
60                        self.queue_to_send = qu
61                if self.events.has_key(event):
62                        if not qu in self.events[event]:
63                                self.events[event].append(qu)
64                else :
65                        self.events[event] = [qu]
66        # END register
67
68        def unregisterEvents(self, name, event):
69                """ Records a plugin from an event """
70                if not self.queues.has_key(name):
71                        return
72                qu = self.queues[name]
73                if self.events.has_key(event) :
74                        if qu in self.events[event]:
75                                self.events[event].remove(qu)
76        # END register
77
78        def unregister(self, name):
79                if not self.queues.has_key(name):
80                        return
81                qu = self.queues[name]
82                for event in self.events:
83                        if qu in self.events[event]:
84                                self.events[event].remove(qu)
85                del self.queues[name]
86        # END unregister
87
88        def sendPlugin(self, event, con, data, qu=None):
89                """ Sends an event to registered plugins"""
90                if self.events.has_key(event):
91                        if event in self.events_to_store and len(self.events['VISUAL']) == 0:
92                                # Save event if no visual plugin is registered
93                                self.saveQueue.put((event, con, data))
94                        for queue in self.events[event]:
95                                if qu == None or qu == queue:
96                                        queue.put((event, con, data))
97                        if event == 'ROSTER' and self.queue_to_send in self.events[event]:
98                                # send saved events
99                                while not self.saveQueue.empty():
100                                        ev = self.saveQueue.get()
101                                        self.queue_to_send.put(ev)
102                                self.queue_to_send = None
103        # END sendPlugin
104# END GajimHub
Note: See TracBrowser for help on using the browser.