Add main socket communication
This commit is contained in:
+58
-7
@@ -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" )
|
||||||
|
|||||||
Reference in New Issue
Block a user