def setUpClass(cls): """ SetUp the whole class. """ cls._clients = {} cls._servers = {} cls._handlers = {} cls._RANGE = 4 for x in range(1, cls._RANGE): endpoint = "ipc:///tmp/%d.ipc" % x cls._clients[x] = DefaultChannel(endpoint) cls._servers[x] = DefaultChannel(endpoint) cls._clients[x].connect() cls._servers[x].bind() handler_table = {} for x in range(1, cls._RANGE): server = cls._servers[x] handler = Handler(x, server) cls._handlers[x] = handler handler_table[server.socket] = handler control_channel = DefaultChannel('ipc:///tmp/control.ipc') control_channel.bind() control_handler = SimpleControlHandler(control_channel, name='Control') my_dispatcher = Dispatcher(handler_table) my_dispatcher.control_handler = control_handler threading.Thread(target=my_dispatcher.dispatch_events).start()
def start_service(endpoint): control = DefaultChannel(endpoint) control.connect() global keep_going while keep_going: command = input('> ') command_ftn = commands.get(command, unkown_command) command_ftn(control) print()
def dispatch_events_test(self): # """ Test dispatch events. """ handlers = ReactorDispatcherTestCase._handlers # msg = "{\"source\": \"%d\", \"payload\": \"False\"}" header1 = {'source': '1', 'payload': 'False'} header2 = {'source': '2', 'payload': 'True'} payload2 = bytes([1, 2]) header3 = {'source': '3', 'payload': 'True'} payload3 = bytes([1, 2, 3]) try: client1 = ReactorDispatcherTestCase._clients[1] client2 = ReactorDispatcherTestCase._clients[2] client3 = ReactorDispatcherTestCase._clients[3] except KeyError as k: self.fail("Could not get clients: {0}".format(k)) client1.send([header1]) resp1 = client1.recv() self.assertEquals(1, resp1[0].get('sink'), 'Sink value wrong.') self.assertEquals(header1['source'], handlers[1]._header['source']) self.assertEquals(header1['payload'], handlers[1]._header['payload']) client2.send([header2, payload2]) resp2 = client2.recv() self.assertEquals('2', handlers[2]._header['source']) self.assertEquals('True', handlers[2]._header['payload']) self.assertEquals(payload2[0], handlers[2]._payload[0]) self.assertEquals(payload2[1]**2, handlers[2]._payload[1]) self.assertEquals(2, resp2[0].get('sink'), 'Sink value wrong.') client3.send([header3, payload3]) resp3 = client3.recv() # Checking handling of third client self.assertEquals('3', handlers[3]._header['source']) self.assertEquals('True', handlers[3]._header['payload']) self.assertEquals(payload3[0], handlers[3]._payload[0]) self.assertEquals(payload3[1]**3, handlers[3]._payload[1]) self.assertEquals(payload3[2]**3, handlers[3]._payload[2]) # Receing response from handler3 self.assertEquals(3, resp3[0].get('sink'), 'Sink value wrong.') control = DefaultChannel('ipc:///tmp/control.ipc') control.connect() control.send([{'action': 'terminate'}]) control.close()