def setUp(self): #self.scheduler logging.basicConfig() self.scheduler = Scheduler(DefaultPolling()) #self.scheduler.debugging = True #self.scheduler.logger.setLevel('DEBUG') #Client.logger.setLevel('DEBUG') import tests import os.path rootpath, _ = os.path.split(tests.__path__[0]) if rootpath: os.chdir(rootpath) self.scheduler.queue.addSubQueue(3, PollEvent.createMatcher(category=PollEvent.WRITE_READY), 'write', None, None, CBQueue.AutoClassQueue.initHelper('fileno')) self.scheduler.queue.addSubQueue(1, PollEvent.createMatcher(category=PollEvent.READ_READY), 'read', None, None, CBQueue.AutoClassQueue.initHelper('fileno')) self.scheduler.queue.addSubQueue(5, PollEvent.createMatcher(category=PollEvent.ERROR), 'error') self.scheduler.queue.addSubQueue(2, ConnectionControlEvent.createMatcher(), 'control') self.scheduler.queue.addSubQueue(4, ConnectionWriteEvent.createMatcher(), 'connectionwrite', 40, 40, CBQueue.AutoClassQueue.initHelper('connection')) self.scheduler.queue.addSubQueue(10, RoutineControlEvent.createMatcher(), 'routine') self.scheduler.queue.addSubQueue(9, TimerEvent.createMatcher(), 'timer') self.scheduler.queue.addSubQueue(8, ResolveResponseEvent.createMatcher(), 'resolve') self.scheduler.queue.addSubQueue(8, ResolveRequestEvent.createMatcher(), 'resolvereq') self.scheduler.queue.addSubQueue(20, SystemControlEvent.createMatcher(), 'sysctl') self.scheduler.queue.addSubQueue(0, SystemControlLowPriorityEvent.createMatcher(), 'sysctllow') #Client.logger.setLevel('DEBUG') #TcpServer.logger.setLevel('DEBUG') self.protocolServer = TestProtocol(True) self.protocolClient = TestProtocol(False) self.resolver = Resolver(scheduler=self.scheduler) self.resolver.start()
def closed(self, connection): ''' routine for connection closed ''' connection.scheduler.ignore(ConnectionWriteEvent.createMatcher(connection = connection)) for m in self._clearwritequeue(connection): yield m
async def error(self, connection): ''' routine for connection error ''' err = connection.socket.getsockopt(SOL_SOCKET, SO_ERROR) self._logger.warning('Connection error status: %d(%s)', err, errno.errorcode.get(err, 'Not found')) connection.scheduler.ignore(ConnectionWriteEvent.createMatcher(connection = connection)) await self._clearwritequeue(connection)
def closed(self, connection): ''' routine for connection closed ''' connection.scheduler.ignore( ConnectionWriteEvent.createMatcher(connection=connection)) for m in self._clearwritequeue(connection): yield m
def init(self, connection): ''' routine for connection initialization ''' try: connection.createdqueues = [] if self.createqueue: connection.queue = connection.scheduler.queue.addSubQueue( self.writepriority, ConnectionWriteEvent.createMatcher(connection=connection), ('write', connection), self.writequeuesize) connection.createdqueues.append(connection.queue) except IndexError: pass if False: yield
async def init(self, connection): await Protocol.init(self, connection) connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.messagepriority, OpenflowPresetupMessageEvent.createMatcher(connection = connection), ('presetup', connection))) connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.messagepriority, OpenflowConnectionStateEvent.createMatcher(connection = connection), ('connstate', connection))) connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.messagepriority + 1, OpenflowResponseEvent.createMatcher(connection = connection), ('response', connection), self.messagequeuesize)) connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.messagepriority, OpenflowAsyncMessageEvent.createMatcher(connection = connection), ('async', connection), self.messagequeuesize)) connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.messagepriority, OpenflowExperimenterMessageEvent.createMatcher(connection = connection), ('experimenter', connection), self.messagequeuesize)) # Add priority to echo reply, or the whole connection is down connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.writepriority + 10, ConnectionWriteEvent.createMatcher(connection = connection, _ismatch = lambda x: hasattr(x, 'echoreply') and x.echoreply), ('echoreply', connection))) connection._rate_limiter = RateLimiter(200, connection) await self.reconnect_init(connection)
def init(self, connection): for m in Protocol.init(self, connection): yield m connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.messagepriority, OpenflowPresetupMessageEvent.createMatcher(connection = connection), ('presetup', connection))) connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.messagepriority, OpenflowConnectionStateEvent.createMatcher(connection = connection), ('connstate', connection))) connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.messagepriority + 1, OpenflowResponseEvent.createMatcher(connection = connection), ('response', connection), self.messagequeuesize)) connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.messagepriority, OpenflowAsyncMessageEvent.createMatcher(connection = connection), ('async', connection), self.messagequeuesize)) connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.messagepriority, OpenflowExperimenterMessageEvent.createMatcher(connection = connection), ('experimenter', connection), self.messagequeuesize)) # Add priority to echo reply, or the whole connection is down connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.writepriority + 10, ConnectionWriteEvent.createMatcher(connection = connection, _ismatch = lambda x: hasattr(x, 'echoreply') and x.echoreply), ('echoreply', connection))) for m in self.reconnect_init(connection): yield m
def init(self, connection): """ routine for connection initialization """ try: connection.createdqueues = [] if self.createqueue: connection.queue = connection.scheduler.queue.addSubQueue( self.writepriority, ConnectionWriteEvent.createMatcher(connection=connection), ("write", connection), self.writequeuesize, ) connection.createdqueues.append(connection.queue) except IndexError: pass if False: yield
def _extra_queues(self, connection): connection.createdqueues.append(connection.scheduler.queue.addSubQueue(\ self.writepriority + 10, ConnectionWriteEvent.createMatcher(connection = connection, _ismatch = lambda x: hasattr(x, 'echoreply') and x.echoreply), ('echoreply', connection))) if False: yield