def last_update(room_id): # TODO: send results table in getViewRoom last_date = request.args.get('date', None) if not last_date: return 'Missing date parameter', 400 is_valid = ObjectId.is_valid(room_id) if not is_valid: return 'Room id is not valid omer', 400 room = Rooms.objects(id=room_id).first() if room: resultTable = room.resultsTable data = { 'result': room.resultsTable, 'is_uptodate': False } if room.lastResultUpdate: # parse string to datetime datetime_last_date = datetime.strptime(last_date, '%d.%m.%Y %H:%M:%S') # check if up to date if datetime_last_date >= room.lastResultUpdate: data['results'] = None data['is_uptodate'] = True return jsonify({'data': data}), 200 else: return 'No such room', 404
def do_turn(room_id, player_id, new_board, game_ended): is_valid = ObjectId.is_valid(room_id) if not is_valid: socketio.emit("gameUpdate", {"data": 'This is not a valid room id bobo', 'status': 400}, room=request.sid) return room = Rooms.objects(id=room_id).first() if not room: socketio.emit('gameUpdate', {'data': 'No room', 'status': 404}, room=request.sid) return room.board = new_board room.turn = not room.turn room.gameEnded = game_ended room.save() room_json = { "id": room_id, "board": new_board, "turn": room.turn, "resultsTable": room.resultsTable, "gameEnded": game_ended } socketio.emit("gameUpdate", {'data': room_json, 'status': 200}, room=room_id)
def to_view_room(room_id): is_valid = ObjectId.is_valid(room_id) if not is_valid: socketio.emit("viewRoom", {"data": 'This is not a valid room id bobo', "status": 400}, room=request.sid) return room = Rooms.objects(id=room_id).first() if room: join_room(room_id) if room.isOpen: socketio.emit("viewRoom", {"data": 'Wait for game to start! tembel', "status": 202}, room=request.sid) return room_json = room_to_json(room) room_json['resultsTable'] = room.resultsTable room_json['gameEnded'] = room.gameEnded socketio.emit("viewRoom", {"data": room_json, "status": 200}, room=request.sid) return else: socketio.emit("viewRoom", {"data": 'No such room homed', "status": 404}, room=request.sid)
def room_mode(room_id): is_valid = ObjectId.is_valid(room_id) if not is_valid: return 'Room id is not valid omer', 400 room = Rooms.objects(id=room_id).first() if room: return '0' if room.isOpen else '1', 200 return '2', 404
def handle_disconnect(): room_to_close = Rooms.objects(players__match={'sid': request.sid}).only('id').first() # player was not in a room if not room_to_close: return room_id = str(room_to_close['id']) socketio.emit("roomClosed", {"data": 'Player exits room', "status": 200}, room=room_id) close_room(room_id) room_to_close.delete()
def new_offer_response(room_id, response): is_valid = ObjectId.is_valid(room_id) if not is_valid: socketio.emit("offerResult", {"data": 'This is not a valid room id bobo', 'status': 400}, room=request.sid) return room = Rooms.objects(id=room_id).first() if not room: socketio.emit('offerResult', {'data': 'No room', 'status': 404}, room=request.sid) return if response: room.gameEnded = False socketio.emit('offerResult', {'data': response, 'status': 200}, room=room_id)
def close_the_room(room_id, reason): is_valid = ObjectId.is_valid(room_id) if not is_valid: socketio.emit("roomClosed", {"data": 'This is not a valid room id bobo', "status": 404}, room=request.sid) return room = Rooms.objects(id=room_id).first() if not room: socketio.emit("roomClosed", {"data": 'No such room', "status": 404}, room=request.sid) return socketio.emit("roomClosed", {"data": reason, "status": 200}, room=room_id) # This is not my function, its a function of Socketio that implements rooms of sid close_room(room_id) # Delete room from data base room.delete()
def join_game_room(room_id, user_args): # valide room is_valid = ObjectId.is_valid(room_id) if not is_valid: socketio.emit("startGame", {"data": 'This is not a valid room id bobo', "status": 400}, room=request.sid) return # get room from db room = Rooms.objects(id=room_id).first() if room: # if room not open if not room.isOpen: # signal game start socketio.emit('startGame', {'data': 'Game in progress', "status": 410}, room=request.sid) app.logger.info('progress') return # check if player2 chose same color as player1 if user_args['color'] == room.players[0]['color']: socketio.emit('startGame', {"data": 'Same color motek!', "status": 409}, room=request.sid) app.logger.info('color') return # add player to db player = Player(name=user_args['name'], color=user_args['color'], sid=request.sid) room.players.append(player) room.isOpen = False room.save() # add players to room session join_room(room_id) room_json = room_to_json(room) # signal game start socketio.emit("startGame", {'data': room_json, "status": 200}, room=room_id) else: socketio.emit("startGame", {'data': 'No such room', "status": 404}, room=request.sid)
def method_name(room_id): if str(request.method) != 'POST': return 'NOT OPTIONS', 400 data = json.loads(request.get_data().decode()) if 'newBoard' not in data: return 'Missing data parameter', 401 is_valid = ObjectId.is_valid(room_id) if not is_valid: return 'Room id is not valid omer', 402 room = Rooms.objects(id=room_id).first() if not room: return 'No such room', 404 # All good: room.resultsTable = data['newBoard'] room.save() return 'goods', 200
def offer_name_game(room_id): is_valid = ObjectId.is_valid(room_id) if not is_valid: socketio.emit("newGameOffer", {"data": 'This is not a valid room id bobo', 'status': 400}, room=request.sid) return room = Rooms.objects(id=room_id).first() if not room: socketio.emit('newGameOffer', {'data': 'No room', 'status': 404}, room=request.sid) return if not room.gameEnded: socketio.emit('newGameOffer', {'data': 'Game didnt end yet', 'status': 401}, room=request.sid) return # default sid_target = room.players[0].sid # check if the first player is the asker, if he is, set the other player as target if request.sid == room.players[0].sid: sid_target = room.players[1].sid socketio.emit('newGameOffer', {'status': 200} ,room=sid_target)