diff options
Diffstat (limited to 'api/game/socket.py')
-rw-r--r-- | api/game/socket.py | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/api/game/socket.py b/api/game/socket.py index 0318e0b..60fea00 100644 --- a/api/game/socket.py +++ b/api/game/socket.py @@ -1,5 +1,5 @@ from flask import Blueprint, request, make_response -from flask_socketio import SocketIO, emit, Namespace +from flask_socketio import SocketIO, emit, Namespace, join_room from game.voerbak_connector import bord from auth.login_token import token_login from db import cursor, connection @@ -8,28 +8,23 @@ import json from socket_io import io games = {} -listeners = {} class game: def __init__(self, game_id, io, player_1_id, player_2_id): self.game_id = game_id + self.room = "game-" + game_id self.board = bord(7, 6) self.io = io self.player_1_id = player_1_id self.player_2_id = player_2_id - def send(self, message, data): - if not self.game_id in listeners: return - for listener in listeners[self.game_id]: - self.io.emit(message, data, room=listener) - def move(self, user_id, column): if user_id != self.player_1_id and user_id != self.player_2_id: return move = self.player_1_id if self.board.player_1 else self.player_2_id if user_id != move: return self.board.drop_fisje(column) - self.send("fieldUpdate", { "field": self.board.board }) + io.emit("fieldUpdate", { "field": self.board.board }, room=self.room) now = int( time.time() * 1000 ) cursor.execute("update games set last_activity = ?, moves = moves || ? || ',' where game_id = ?", [now, column, self.game_id]) @@ -40,18 +35,18 @@ class game: if not self.board.board_full: winner = self.board.board[int(self.board.win_positions[0][0])] outcome = "w" if winner == "2" else "l" - self.send("finish", { + io.emit("finish", { "winPositions": self.board.win_positions, "boardFull": self.board.board_full - }) + }, room=self.room) self.close("finished", outcome) return - self.send("turnUpdate", { "player1": self.board.player_1 }) + io.emit("turnUpdate", { "player1": self.board.player_1 }, room=self.room) def resign(self): self.board.kill_voerbak() - self.send("resign", "") + io.emit("resign", room=self.room) self.close("resign", "d") def close(self, new_status, outcome): @@ -71,7 +66,6 @@ class game: connection.commit() games.pop(self.game_id) - listeners.pop(self.game_id) @io.on("newMove") def new_move(data): @@ -102,7 +96,8 @@ def resign(data): @io.on("registerGameListener") def register_game_listener(data): - if not data["game_id"]: return - if not data["game_id"] in listeners: listeners[data["game_id"]] = set() - listeners[data["game_id"]].add(request.sid) + game_id = data.get("game_id") + if not game_id: return + + join_room("game-" + game_id) |