import json import string from flask_socketio import SocketIO, emit, join_room from bridzik import Bridzik, BridzikException, Card, Card_colors, Card_values from flask import Flask async_mode = None app = Flask(__name__) app.debug = True app.config['SECRET_KEY'] = 'secret!' socket_ = SocketIO(app, cors_allowed_origins="*", async_mode='eventlet', logger=True, engineio_logger=True) bridzikInstance = Bridzik() players = [] @socket_.on('register_player') def register_player(name: string): if(len(players) < 4): players.append(name) player_id = len(players) - 1 join_room(player_id) get_players_status() sendPlayersNames() emit('register_player',{ 'id_player': player_id}, room=player_id) else: send_error('Prekroceny pocet hracov') @socket_.on('reconnect_to_game') def reconnect_to_game(): get_players_status() @socket_.on('game_status') def get_players_status(): for player_id in range(len(players)): emit('game_status', {'data': 'game_status', 'playerName': players[player_id], 'playerNumber': player_id, 'status': json.loads(json.dumps(bridzikInstance.get_status(player_id), cls=Card.JSONEncoder))}, room=player_id) @socket_.on('add_quess') def add_quess(message): print(message) app.logger.info('Message from user', message) try: bridzikInstance.add_player_guess(int(message['playerNumber']), int(message['quess'])) get_players_status() except BridzikException: send_error('Nie je možné zadať tip.') @socket_.on('play_card') def play_card(message): color, value = message['card'].split('_') try: card = Card(Card_colors[color], Card_values[value]) except KeyError: send_error('Chyba. Opakuj pokus znovu.') try: print(message['playerNumber'], card) bridzikInstance.play_card(message['playerNumber'], card) get_players_status() except BridzikException: get_players_status() send_error('Nie je možné zahrať kartu.') @socket_.on('all_names') def sendPlayersNames(): emit('all_names', {'data': 'players_names', 'players': players}, broadcast=True) @socket_.on('error') def send_error(message: string): emit('error',{'error': message}) socket_.run(app, debug=True, host="0.0.0.0", port="5000" )