Esempio n. 1
0
File: db.py Progetto: mflorin/ir
    def save(self):

        data = {}

        # collect data from all modules
        Event.dispatch('db.save', data)
        
        # save data to the database
        f = open(self.config['file_name'], 'wb')
        cPickle.dump(data, f, -1)
        f.close()

        del data
Esempio n. 2
0
 def topicUpdated(self, user, channel, newTopic):
     ev = Event('topic', newTopic, user, channel, channel, self)
     ev.dispatch()
Esempio n. 3
0
 def userRenamed(self, oldname, newname):
     ev = Event('nick', None, oldname, newname, None, self)
     ev.dispatch()
Esempio n. 4
0
 def userQuit(self, user, quitMessage):
     ev = Event('quit', quitMessage, user, None, None, self)
     ev.dispatch()
Esempio n. 5
0
 def userLeft(self, user, channel):
     ev = Event('parted', None, user, channel, channel, self)
     ev.dispatch()
Esempio n. 6
0
 def userJoined(self, user, channel):
     ev = Event('joined', None, user, channel, channel, self)
     ev.dispatch()
Esempio n. 7
0
 def userKicked(self, kickee, channel, kicker, message):
     ev = Event('kick', message, kicker, kickee, channel, self)
     ev.dispatch()
Esempio n. 8
0
 def action(self, user, channel, emote):
     ev = Event('action', emote, user, None, channel, self)
     ev.dispatch()
Esempio n. 9
0
File: db.py Progetto: mflorin/ir
 def load(self):
     f = open(self.config['file_name'], 'rb')
     data = cPickle.load(f)
     f.close()
     Event.dispatch('db.load', data)
     del data
Esempio n. 10
0
File: config.py Progetto: mflorin/ir
 def reload():
     Config.load()
     Event.dispatch('core.reload', None)
Esempio n. 11
0
File: server.py Progetto: mflorin/ir
    def run(self):

        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        sock.bind((self.config['host'], self.config['port']))
        sock.listen(self.config['backlog'])
        sock.setblocking(0)
        sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)

        listener = sock.fileno()
        self.epoll.register(listener, select.EPOLLIN | select.EPOLLOUT | select.EPOLLHUP)

        Logger.info("%s server started" % self.config['server_name'])

        while self.running:
            try:
                events = self.epoll.poll()
                for fd, event in events:

                    if fd == listener:
                        # New connection
                        (clientsock, address) = sock.accept()
                        clientsock.setblocking(0)
                        fileno = clientsock.fileno()
                        self.epoll.register(fileno, select.EPOLLIN)
                        self.connections[fileno] = {
                            'sock': clientsock, 
                            'addr': address
                        }
                    elif event & select.EPOLLIN:
                        # incoming data from client
                        if self.manager.dispatch(self.connections[fd]) != True:
                            # Client closed connection
                            try:
                                self.closeConnection(fd)
                            except:
                                pass

                    elif event & select.EPOLLHUP:
                        # socket shutdown
                        self.closeConnection(fd)

            except KeyboardInterrupt:
                Logger.debug('CTRL-C was pressed. Stopping server')
                break

            except Exception as e:
                if e.args[0] in {errno.EINTR}:
                    # we do not want to exit because of SIGUSR1
                    # which is our reload signal
                    continue
                else:
                    Logger.exception(str(e))


#        self.stop()
        
        # dispatching shutdown to all modules
        Event.dispatch('core.shutdown')

        Logger.debug("shutting down network sockets")
        self.epoll.unregister(listener)
        self.epoll.close()
        sock.close()

        self.manager.stop()

        Logger.info("%s server ended" % self.config['server_name'])