From cd3d84319e6b9c56d19ebf3b7a5fd62dcd76915b Mon Sep 17 00:00:00 2001 From: Frantisek F Date: Tue, 5 Jul 2022 21:28:05 +0200 Subject: [PATCH] Add main socket communication --- api/__init__.py | 65 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 58 insertions(+), 7 deletions(-) diff --git a/api/__init__.py b/api/__init__.py index 11292d4..3c345d4 100644 --- a/api/__init__.py +++ b/api/__init__.py @@ -1,13 +1,8 @@ import json -import socket import string -from flask_socketio import SocketIO, emit, disconnect, join_room -from flask import session, copy_current_request_context -from api.utils import get_points_sums, sort_card_list +from flask_socketio import SocketIO, emit, join_room from bridzik import Bridzik, BridzikException, Card, Card_colors, Card_values from flask import Flask -from config import Config -from flask import request async_mode = None app = Flask(__name__) @@ -18,8 +13,64 @@ socket_ = SocketIO(app, cors_allowed_origins="*", async_mode='eventlet', logger= bridzikInstance = Bridzik() -players = ['', '', '', ''] +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" )