def enter_room(client, room_id): code, msg = RoomTool.check_room_status(room_id) if code != 0: return code, msg users = RoomTool.room_users(room_id) UsersTool.update_user(client, r_id=room_id, status=UserStatus.waiting) for i in range(0, len(users)): if not users[i]: user = UsersTool.update_user(client) users[i] = user break room = RoomTool.update_room(room_id, users=users) return room
def leave_room(client, room_id=None): if room_id is None: user = UsersTool.current_user(client) room_id = int(user.get('r_id', -1)) if room_id == -1: return None users = RoomTool.room_users(room_id) users.remove(redis_obj.db.get(get_w_key(client))) RoomTool.update_room(room_id, users=users) if not users: RoomTool.delete_room(room_id) UsersTool.update_user(client, r_id=-1, status=UserStatus.free) return RoomTool.room_by(room_id)
def begin(room, clients): r_id = int(room['r_id']) room_clients = RoomTool.room_clients(clients, r_id) room_user = BattleHandler.begin_game(room_clients, r_id) for client in clients: if not client: continue user = UsersTool.update_user(client, status=UserStatus.playing) room, current_user, other_clients = room_user['room'], room_user[ 'user'], room_user['other_clients'] Response('rooms.begin', room).response(clients=clients) gm_say(u'游戏开始啦', room_clients)
def change_position(client, room_id, p_id): users = RoomTool.room_users(room_id) user = UsersTool.update_user(client, p_id=p_id) room = RoomTool.update_room(room_id, users=users) return room
def game_over(clients, room_id): users = UsersTool.room_users(get_room_key(room_id)) for client in clients: if client: UsersTool.update_user(client, status=UserStatus.free) return RoomTool.delete_room(room_id)