Пример #1
0
    def long_poll(self, id):
        from datetime import datetime
        from time import sleep

        start = datetime.now()

        if 'my_board' in request.POST:
            my_board = request.POST['my_board']
            my_board = int(my_board, 2)
        else:
            return ''

        game = self.game_q.filter_by(id=id).first()

        while True:
            Session.refresh(game)
            if not game:
                return ''

            board_size = game.size
            x_pos = game.x_pos
            o_pos = game.o_pos
            cur_board = x_pos | o_pos
            data = {}

            if cur_board > my_board:
                x_pos_bin = int_to_bin(x_pos, board_size)
                o_pos_bin = int_to_bin(o_pos, board_size)

                positions = []
                for i in range(board_size):
                    positions.append([])

                    for j in range(board_size):
                        if x_pos_bin[(i*board_size)+j] == '1':
                            positions[i].append('X')
                        elif o_pos_bin[(i*board_size)+j] == '1':
                            positions[i].append('O')
                        else:
                            positions[i].append('')

                data['result'] = positions

            if bit_count(cur_board) == (board_size**2):
                data['message'] = 'It\'s a tie!'

            if game_over(x_pos):
                data['message'] = 'X Wins!'
            elif game_over(o_pos):
                data['message'] = 'O Wins!'

            if len(data) > 0:
                return data
            
            sleep(1)

            delta = datetime.now() - start
            if delta.seconds >= 30:
                return {'again': True}

        return ''