class TestEvent(unittest.TestCase): def setUp(self): self._event = Event('temperature.high') def test_add_handler(self): self._event.add_handler(handler_temperature_event1) self.assertEqual(handler_temperature_event1, self._event.get_handlers()[id(handler_temperature_event1)]) def test_remove_handler(self): self._event.add_handler(handler_temperature_event1) self._event.remove_handler(handler_temperature_event1) self.assertEqual({}, self._event.get_handlers()) def test_count_handlers(self): self._event.add_handler(handler_temperature_event1) self._event.add_handler(handler_temperature_event1) self._event.add_handler(handler_temperature_event2) self._event.add_handler(handler_temperature_event2) self.assertEqual(2, len(self._event.get_handlers())) def test_count_notified(self): self._event.add_handler(handler_temperature_event1) self._event.add_handler(handler_temperature_event2) self.assertEqual(2, self._event.register('payload')) def test_clear_handlers(self): self._event.add_handler(handler_temperature_event1) self._event.add_handler(handler_temperature_event2) self._event.clear_handlers() self.assertEqual(0, len(self._event.get_handlers()))
class GameServer: def __init__(self, server_host, server_port, client_host, client_port): self.s = socket.socket() self.s_host = server_host self.s_port = server_port self.c_host = client_host self.c_port = client_port self.c = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.eventwatcher = Event() self.server = None self.game = Text() self.lock = Lock() def start(self): self.server = websockets.serve(self.game_messages, None, self.s_port) self.c.connect((self.c_host, self.c_port)) asyncio.get_event_loop().run_until_complete(self.server) asyncio.get_event_loop().run_forever() self.s.close() async def game_messages(self, websocket, path): while True: message = await websocket.recv() self.consumer(message) #self.close_conn() def consumer(self, msg): # fire all of the events [message, nick] = msg.split('|') print(nick) if len(nick) > 0 and nick != 'null' and nick != 'undefined': if len(message) > 0: #with self.lock: self.game.setText(message, nick) self.run_thread() def game_thread(self): if self.game is not None: #with self.lock: while True: self.eventwatcher += self.game.on_tick self.eventwatcher() game_bytes = self.game.getImage() self.c.sendall(game_bytes) self.eventwatcher.clear_handlers() time.sleep(1 / 4) self.game = None def run_thread(self): game_thread = Thread(target=self.game_thread) game_thread.start() def is_playing(self): if self.game is None: return True else: return self.game.playing
class GameServer: def __init__(self, server_host, server_port, client_host, client_port): self.s = socket.socket() self.s_host = server_host self.s_port = server_port self.c_host = client_host self.c_port = client_port self.c = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.eventwatcher = Event() self.server = None self.game = None self.lock = Lock() def start(self): self.server = websockets.serve(self.game_messages, None, self.s_port) self.c.connect((self.c_host, self.c_port)) asyncio.get_event_loop().run_until_complete(self.server) asyncio.get_event_loop().run_forever() self.s.close() async def game_messages(self, websocket, path): while True: message = await websocket.recv() self.consumer(message) #self.close_conn() def consumer(self, msg): if self.game is None: if 'snake' in msg: self.game = Snake(20, 25) self.run_thread() if 'tetris' in msg: self.game = Tetris(20, 25) self.run_thread() else: # fire all of the events if len(msg) > 0: #with self.lock: if 'left' in msg: self.eventwatcher += self.game.on_left elif 'right' in msg: self.eventwatcher += self.game.on_right elif 'up' in msg: self.eventwatcher += self.game.on_up elif 'down' in msg: self.eventwatcher += self.game.on_down elif 'abutton' in msg: self.eventwatcher += self.game.on_a elif 'bbutton' in msg: self.eventwatcher += self.game.on_b def game_thread(self): if self.game is not None: #with self.lock: while self.game.playing: self.eventwatcher += self.game.on_tick self.eventwatcher() game_bytes = self.game.draw_board() self.c.sendall(game_bytes) self.eventwatcher.clear_handlers() time.sleep(1 / 30) self.game = None def run_thread(self): game_thread = Thread(target=self.game_thread) game_thread.start() def is_playing(self): if self.game is None: return True else: return self.game.playing