Exemplo n.º 1
0
    def test_pipe(self):
        reader, writer = os.pipe()
        try:
            loop = EventLoop()
            nb_reads = [0]
            nb_writes = [0]
            
            duration = .1
            interval = .0095
            expected_nb = 10
            assert expected_nb == duration // interval
            # Avoid a race condition between the loop stop and the last read.
            assert expected_nb < duration / interval
            
            start = time.time()
            loop.add_timer(duration)(loop.stop)
            
            @loop.add_timer(interval, repeat=True)
            def write_something():
                assert os.write(writer, 'foo') == 3
                nb_writes[0] += 1

            @loop.block_reader(reader)
            def incoming(data):
                assert data == 'foo'
                nb_reads[0] += 1
            
            loop.run()
            assert round(time.time() - start, 2) == duration
            assert nb_writes[0] == expected_nb, nb_writes
            assert nb_reads[0] == expected_nb, nb_reads
        finally:
            os.close(reader)
            os.close(writer)
Exemplo n.º 2
0
    def run(self):
        menu = Menu(self.screen)
        hs_screen = HighScoreScreen(self.screen, self.score_keeper)
        intro_seq = Intro(self.screen)
        e_loop = EventLoop(
            loop_running=True,
            actions={pygame.MOUSEBUTTONDOWN: menu.check_buttons})

        while e_loop.loop_running:
            self.clock.tick(60)  # 60 fps limit
            e_loop.check_events()
            self.screen.fill(PacManPortalGame.BLACK_BG)
            if not menu.hs_screen:
                intro_seq.update()  # display intro/menu
                intro_seq.blit()
                menu.update()
                menu.blit()
            else:
                hs_screen.blit()  # display highs score screen
                hs_screen.check_done()
            if menu.ready_to_play:
                pygame.mixer.music.stop()  # stop menu music
                self.play_game()  # player selected play, so run game
                for g in self.ghosts:
                    g.reset_speed()
                menu.ready_to_play = False
                self.score_keeper.save_high_scores(
                )  # save high scores only on complete play
                hs_screen.prep_images()  # update high scores page
                hs_screen.position()
            elif not pygame.mixer.music.get_busy():
                pygame.mixer.music.play(-1)  # music loop
            pygame.display.flip()
    def play_game(self):
        """Run the game's event loop, using an EventLoop object"""
        e_loop = EventLoop(loop_running=True,
                           actions={
                               **self.player.event_map,
                               **self.actions
                           })
        # game init signal
        # pygame.time.set_timer(PacManPortalGame.START_EVENT, self.level_transition.transition_time)
        self.level_transition.set_show_transition()
        self.game_over = False
        if self.player.dead:
            self.player.revive()
            self.score_keeper.reset_level()
            self.life_counter.reset_counter()
            self.rebuild_maze()

        while e_loop.loop_running:
            self.clock.tick(60)  # 60 fps limit
            e_loop.check_events()
            self.update_screen()
            if self.game_over:
                pygame.mixer.stop()
                self.score_keeper.reset_level()
                e_loop.loop_running = False
Exemplo n.º 4
0
 def test_push_back(self):
     reader, writer = os.pipe()
     try:
         data = 'Lorem ipsum dolor sit.'
         assert os.write(writer, data) == len(data)
         
         loop = EventLoop()
         
         state = [1]
         
         @loop.push_back_reader(reader, max_block_size=5)
         def new_block(data, push_back):
             if state[0] == 1:
                 assert data == 'Lorem'
             elif state[0] == 2:
                 assert data == ' ipsu'
                 push_back(data)
             elif state[0] == 3:
                 assert data == ' ipsum dol'
                 push_back('d')
                 push_back('ol')
             elif state[0] == 4:
                 assert data == 'dolor si'
             elif state[0] == 5:
                 assert data == 't.'
                 loop.stop()
             else:
                 assert False
             state[0] += 1
         
         loop.run()
         assert state[0] == 6
     finally:
         os.close(reader)
         os.close(writer)
Exemplo n.º 5
0
    def _simple(self, reader, writer):
        loop = EventLoop()
        nb_reads = [0]

        @loop.block_reader(reader)
        def incoming(data):
            assert data == 'foo'
            nb_reads[0] += 1
            loop.stop()
        
        assert os.write(writer, 'foo') == 3
        loop.run()
        assert nb_reads[0] == 1
Exemplo n.º 6
0
    def run(self):
        """Run the application loop so that the menu can be displayed and the game started"""
        loop = EventLoop(loop_running=True, actions=self.menu.action_map)

        while True:
            loop.check_events()
            self.update()
            if self.menu.start:
                self.game_active = True
                self.timer = 400
                self.time_warn = False
                self.start_game()
                self.menu.start = False
                self.game_active = False
                self.game_won = False
                self.init_world()
Exemplo n.º 7
0
    def test_timing(self):
        reader, writer = os.pipe()
        try:
            loop = EventLoop()
            
            data = [
                'Lorem ipsum\n',
                'dolor\nsit\namet, ',
                'consectetur',
                ' adipiscing ',
                'elit.\nAliquam magna dolor, ', # no newline character at the end
            ]
            # Reverse because list.pop() pops at the end.
            data = data[::-1]
            
            @loop.add_timer(.01, repeat=True)
            def slow_write():
                if data:
                    os.write(writer, data.pop())
                else:
                    loop.stop()
            
            lines = []
            @loop.line_reader(reader)
            def new_line(line):
                lines.append(line)
                expected_time = {
                    'L': .01, 'd': .02, 's': .02, 'a': .05}[line[0]]
                assert round(time.time() - start, 2) == expected_time

            time.sleep(.02)
            # Reset so that the timing is correct in spite of the sleep we
            # just did.
            slow_write.reset()
            start = time.time()
            loop.run()
            
            assert lines == [
                'Lorem ipsum\n',
                'dolor\n',
                'sit\n',
                'amet, consectetur adipiscing elit.\n'
            ]
        finally:
            os.close(reader)
            os.close(writer)
Exemplo n.º 8
0
    def play(self):
        pacman = self.pacman
        maze = self.maze
        ghost = []
        for i in range(1):
            g = Ghost(self.screen)
            g.type = i
            g.x += 30 * i
            g.prep_ghost()
            ghost.append(g)

        eloop = EventLoop(status=False)

        while not eloop.finished:
            eloop.check_events(pacman)
            eloop.update_screen(pacman)
            pacman.update(maze, self.gamestats, self.pacmanGroup)
            for i in range(1):
                ghost[i].blit()
            self.update_screen()
Exemplo n.º 9
0
    def play_game(self):
        e_loop = EventLoop(loop_running=True,
                           actions={
                               **self.player.event_map,
                               **self.actions
                           })
        self.level_transition.set_show_transition()
        self.game_over = False
        if self.player.dead:
            self.player.revive()
            self.score_keeper.reset_level()
            self.life_counter.reset_counter()
            self.rebuild_maze()

        while e_loop.loop_running:
            self.clock.tick(60)  # 60 fps limit
            e_loop.check_events()
            self.update_screen()
            if self.game_over:
                pygame.mixer.stop()
                self.score_keeper.reset_level()
                e_loop.loop_running = False
Exemplo n.º 10
0
 def test_line_reader(self):
     reader, writer = os.pipe()
     try:
         loop = EventLoop()
         
         data = [
             'Lorem ipsum\n',
             'dolor\nsit\namet, ',
             'consectetur',
             ' adipiscing ',
             'elit.\nAliquam magna dolor, ', # no newline character at the end
         ]
         # Reverse because list.pop() pops at the end.
         data = data[::-1]
         
         start = time.time()
         @loop.add_timer(.01, repeat=True)
         def slow_write():
             if data:
                 d = data.pop()
                 assert os.write(writer, d) == len(d)
             else:
                 loop.stop()
         
         lines = []
         loop.line_reader(reader, max_block_size=5)(lines.append)
             
         loop.run()
         
         assert lines == [
             'Lorem ipsum\n',
             'dolor\n',
             'sit\n',
             'amet, consectetur adipiscing elit.\n'
         ]
     finally:
         os.close(reader)
         os.close(writer)
Exemplo n.º 11
0
    def setUp(self):
        self.mod_tessumod = None
        self.ts_client_query_server = None
        self.__ts_plugin_info = None
        self.event_loop = EventLoop()
        self.__verifiers = []
        self.__max_end_time = None
        self.__min_end_time = None
        self.__event_handlers = {}

        shutil.rmtree(TMP_DIRPATH, ignore_errors=True)

        if FAKES_DIRPATH not in sys.path:
            sys.path.append(FAKES_DIRPATH)
        if MOD_SCRIPTS_DIRPATH not in sys.path:
            sys.path.append(MOD_SCRIPTS_DIRPATH)

        os.makedirs(MODS_VERSION_DIRPATH)

        shutil.copytree(os.path.join(MOD_SRC_DIRPATH, "gui"),
                        os.path.join(MODS_VERSION_DIRPATH, "gui"))

        import ResMgr
        ResMgr.RES_MODS_VERSION_PATH = MODS_VERSION_DIRPATH

        mod_settings.INI_DIRPATH = INI_DIRPATH
        mod_settings.reset_cache_file()
        mod_settings.reset_settings_file()
        self.change_mod_settings(
            General={
                # "log_level": "0", # enable for debug logging
                "speak_stop_delay": "0"  # makes tests execute faster
            },
            TSClientQueryService={
                "polling_interval": "0"  # makes tests execute faster
            })
        # create empty ts plugin installer file
        open(TS_PLUGIN_INSTALLER_PATH, "w").close()
Exemplo n.º 12
0
    def test_packets(self):
        reader, writer = os.pipe()
        try:
            loop = EventLoop()
            original_packets = [
                'foo',
                '',
                'Lorem ipsum dolor sit amet.',
                '42',
            ]
            packets = []

            def callback(packet):
                packets.append(packet)
                assert packet_reader.dropped_bytes == {
                    1: 0,  2: 1,  3: 3,  4: 6
                }[len(packets)]
                if len(packets) == len(original_packets):
                    loop.stop()

            def write(data):
                assert os.write(writer, data) == len(data)
                
            for i, packet in enumerate(original_packets):
                write('blah'[:i]) # non-packet garbage
                write(PacketReader.PACKET_DELIMITER)
                write(chr(len(packet) + 1))
                write(packet)
                
            # Choose a very small block size on purpose to (hopefully)
            # test more code paths such as half packets
            packet_reader = PacketReader(loop, reader, callback,
                                         max_block_size=3)
            loop.run()
            assert packets == original_packets
        finally:
            os.close(reader)
            os.close(writer)
Exemplo n.º 13
0
    def start_game(self):
        """Launch the game and begin checking for events"""
        loop = EventLoop(loop_running=True, actions=self.action_map)
        self.score = 0
        self.lives = 3
        self.coins = 0

        while loop.loop_running and self.game_active:
            self.clock.tick(60)  # 60 fps cap
            loop.check_events()
            self.update()
            if self.mario.state_info['death_finish']:
                self.handle_player_killed()
            elif not pygame.mixer.music.get_busy() and self.game_won:
                self.menu.high_score.save(self.score)
                self.game_active = False
            elif not pygame.mixer.music.get_busy(
            ) and self.mario.state_info['dead']:
                pygame.mixer.music.load('audio/Mario-Die.wav')
                pygame.mixer.music.play()
            elif not pygame.mixer.music.get_busy() and not self.paused:
                pygame.mixer.music.load('audio/BG-Main.wav')
                pygame.mixer.music.play(-1)
                    #				print(callback.__name__)
                    callback(key.fileobj, mask)
            except EventLoopAppException:
                pass


if __name__ == "__main__":
    env = 'development'
    cache_policy = LRU
    if len(sys.argv) > 1:
        env = sys.argv[1]
        if len(sys.argv) == 3:
            cache_policy = sys.argv[2]
    print('Event loop app is starting in ' + env + ' environment with ' +
          cache_policy + ' cache policy.')

    event_queue = EventQueue()
    app = EventLoopApp(env, event_queue)
    event_loop = EventLoop(event_queue, cache_policy)

    try:
        conn_process = Thread(name='conn_process', target=app.start)
        event_loop_process = Thread(name='event_loop_process',
                                    target=event_loop.start)
        conn_process.start()
        event_loop_process.start()
    except KeyboardInterrupt:
        app.SERVER_SOCKET.close()
        print('You pressed CTRL + C')
        print('Server terminated gracefully')
Exemplo n.º 15
0
def main():
    window_with_plot = Window(b"Lab 3")
    EventLoop(window_with_plot).run()
    return 0
Exemplo n.º 16
0
        logging.info("src fd:%s listing server port:%s",
                     self.server_sock.fileno(), port)
        self.loop = None  # type: EventLoop

    def handle_event(self, sock, fd, mode):
        # type: (socket.socket,int,int) -> None
        if sock == self.server_sock:
            local_sock, addr = sock.accept()
            logging.info("receive event fd:%s addr:%s", local_sock.fileno(),
                         addr)
            TCPEvent(local_sock, self.loop)
        else:
            raise Exception("no this socket")

    def add_loop(self, loop):
        # type: (EventLoop) -> None
        self.loop = loop
        loop.add(self.server_sock, POLL_IN | POLL_ERR, self)


if __name__ == '__main__':
    server_port = 1082
    logging.basicConfig(
        level=logging.DEBUG,
        format=
        '%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s'
    )
    loop = EventLoop()
    TCPServerEvent(server_port).add_loop(loop)
    loop.run()
Exemplo n.º 17
0
 def __init__(self, name, common_conn_que):
     Thread.__init__(self)
     self.name = name
     self.common_conn_que = common_conn_que
     self.__loop = EventLoop(self.get_new_conn, self.get_conn, self.remove_conn)
     self.__fd_to_conns = {}