Esempio n. 1
0
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()))
Esempio n. 2
0
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
Esempio n. 3
0
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