예제 #1
0
 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
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
 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
예제 #5
0
 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)