Add main socket communication

This commit is contained in:
Frantisek F
2022-07-05 21:28:05 +02:00
parent 3053040da9
commit cd3d84319e
+58 -7
View File
@@ -1,13 +1,8 @@
import json import json
import socket
import string import string
from flask_socketio import SocketIO, emit, disconnect, join_room from flask_socketio import SocketIO, emit, join_room
from flask import session, copy_current_request_context
from api.utils import get_points_sums, sort_card_list
from bridzik import Bridzik, BridzikException, Card, Card_colors, Card_values from bridzik import Bridzik, BridzikException, Card, Card_colors, Card_values
from flask import Flask from flask import Flask
from config import Config
from flask import request
async_mode = None async_mode = None
app = Flask(__name__) app = Flask(__name__)
@@ -18,8 +13,64 @@ socket_ = SocketIO(app, cors_allowed_origins="*", async_mode='eventlet', logger=
bridzikInstance = Bridzik() 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" ) socket_.run(app, debug=True, host="0.0.0.0", port="5000" )