def trusteeship(msg_dict, session): player = SessionMgr().player(session) player.trusteeship(msg_dict.get("ai_type"), msg_dict.get("pledge_type"), msg_dict.get("pledge"), msg_dict.get("push_pledge_type"), msg_dict.get("loot_dealer_type"), msg_dict.get("loot_dealer"))
def __init__(self, stream, address): from base.session_mgr import SessionMgr self.uuid = str(uuid4()) SessionMgr().add(self) self._stream = stream self.address = address self.last_time = time.time() self._stream.set_close_callback(self.on_close) self._stream.read_bytes(8, self.on_head) self.head_data = None print "connection opened.", address, "count:", len( SessionMgr().session_set)
def receive(cmd, msg_dict, session): try: # if cmd != HEARTBEAT: # Logger().net("msg " + hex(cmd) + " " + json.dumps(msg_dict)) serial_router[cmd](msg_dict, session) except AttributeError as e: player = SessionMgr().player(session) print "cmd", hex(cmd), "session", session.uuid, "player", player print e traceback.print_exc()
def on_close(self): from base.session_mgr import SessionMgr address = self.address try: player = SessionMgr().player(self) if player and player.session == self: player.online_status(False) player.session = None if player.room.ai_time == 0: player.table.set_ai_time(player.seat) #玩家断线设置托管时间 except ReferenceError: pass SessionMgr().cancel(self) print "connection closed.", address, "count:", len( SessionMgr().session_set)
def heartbeat(): from base.table_mgr import TableMgr TableMgr().heartbeat() from base.session_mgr import SessionMgr SessionMgr().heartbeat()
def enter_room(self, player_id, info, session): newinfo = info.replace("\\'", "") newinfo = newinfo.replace('\\"', "") newinfo = newinfo.replace('\\n', "") newinfo = newinfo.replace('\\t', "") if not self.owner_info and player_id == self.owner: self.owner_info = newinfo msg_dict = dict() msg_dict["room_id"] = self.room_id msg_dict["owner"] = self.owner msg_dict["owner_info"] = self.owner_info msg_dict["room_state"] = table_state_code_map[self.state] msg_dict["round"] = self.cur_round msg_dict["rounds"] = self.conf.rounds msg_dict["is_admin"] = (player_id in self.guild_admins) # if len(self.player_dict.keys()) + len(self.lookon_player_dict.keys()) >= self.chairs + 10: # if len(self.player_dict.keys()) >= self.chairs: # msg_dict["code"] = 2 # send(ENTER_ROOM, msg_dict, session) # self.logger.warn("room {0} is full, player {1} enter failed".format(self.room_id, player_id)) # return player = Player(player_id, newinfo, session, self) from base.match_mgr import MatchMgr MatchMgr().player_enter(player) from base.state_base.player.init import InitState player.machine.trigger(InitState()) player.is_wait = True self.lookon_player_dict[player_id] = player SessionMgr().register(player, session) msg_dict["code"] = 0 msg_dict["kwargs"] = self.kwargs msg_dict["rest_cards"] = self.cards_total msg_dict["state"] = player_state_code_map[player.state] msg_dict["player"] = list() msg_dict["dealer"] = self.dealer_seat msg_dict["player_status"] = player_state_code_map["InitState"] for k, v in self.seat_dict.items(): p = dict() p["seat"] = k p["player"] = v.uuid p["info"] = v.info p["state"] = player_state_code_map[v.state] p["is_online"] = v.is_online p["score"] = v.get_total_score() p["pledge"] = v.round.pledge p["loot_dealer"] = v.round.loot_dealer p["is_wait"] = v.is_wait p["niu_type"] = v.round.niu_type if v.session is not None: p["ip"] = v.session.address[0] msg_dict["player"].append(p) p["cards_in_hand"] = list() count = len(v.round.cards_in_hand) if v.state == "ShowCardState": p["cardsign_in_hand"] = list() cards_hand = copy.deepcopy(v.round.cards_in_hand) cardsign_in_hand = show_card_type2(v.round.cards_in_hand, v.round.niu_type) for w in cardsign_in_hand: p["cardsign_in_hand"].append(w) for c in cards_hand: p["cards_in_hand"].append(c) else: for _ in v.round.cards_in_hand: p["cards_in_hand"].append(0) send(ENTER_ROOM, msg_dict, session) ''' msg_dict = dict() msg_dict["player"] = player_id msg_dict["info"] = player.info msg_dict["seat"] = player.seat msg_dict["dealer"] = self.dealer_seat # 庄家位置 msg_dict["state"] = player_state_code_map[player.state] msg_dict["is_online"] = player.is_online msg_dict["score"] = player.room.score msg_dict["pledge"] = player.round.pledge msg_dict["loot_dealer"] = player.round.loot_dealer msg_dict["is_wait"] = player.is_wait msg_dict["ip"] = player.session.address[0] for i in self.player_dict.values(): if i.uuid == player_id: continue send(ENTER_ROOM_OTHER, msg_dict, i.session) ''' self.dumps() self.logger.info("player {0} enter room".format(player_id))
def report_server_info(): msg_dict = dict() msg_dict["cmd"] = LC_SERVER_REPORT msg_dict["online_count"] = len(SessionMgr().online_set) CenterClient().send_message(msg_dict)
def speaker(msg_dict, session): player = SessionMgr().player(session) player.table.add_chat_msg(player.uuid, msg_dict, player.seat)
def look_card(msg_dict, session): player = SessionMgr().player(session) player.machine.cur_state.execute(player, "look_card", msg_dict)
def double_pledge(msg_dict, session): player = SessionMgr().player(session) player.machine.cur_state.execute(player, "double_pledge", msg_dict)
def start(msg_dict, session): player = SessionMgr().player(session) player.machine.cur_state.execute(player, "start", msg_dict)
def action(msg_dict, session): player = SessionMgr().player(session) player.machine.cur_state.execute(player, "action", msg_dict)
def ready(msg_dict, session): player = SessionMgr().player(session) player.machine.cur_state.execute(player, "ready", msg_dict)
def vote(msg_dict, session): player = SessionMgr().player(session) player.vote(msg_dict)
def dismiss_room(msg_dict, session): player = SessionMgr().player(session) player.dismiss_room()
def exit_room(msg_dict, session): player = SessionMgr().player(session) player.exit_room()
def enter(self, room_id, player_id, info, user_token, session): print "enter room %d" % room_id table = self.room_dict.get(room_id) if not table: if room_id in self.room_settle_cache: send(SETTLEMENT_FOR_ROOM_DN, self.room_settle_cache[room_id], session) msg_dict = dict() msg_dict["code"] = 0 send(DISMISS_ROOM, msg_dict, session) else: # 给前端返回房间不存在的错误 msg_dict = dict() msg_dict["code"] = 1 send(ENTER_ROOM, msg_dict, session) print("room {0} not exist, player {1} enter failed".format( room_id, player_id)) return #检测token是否合法 token = redis.get("token:{0}".format(player_id)) if token == None or token != user_token: msg_dict = dict() msg_dict["code"] = 3 #token验证不通过,非法用户 send(ENTER_ROOM, msg_dict, session) table.logger.info("token error: server;{0} client:{1}".format( token, user_token)) return if table.room_id != room_id: self.room_dict[table.room_id] = table del self.room_dict[room_id] msg_dict = dict() msg_dict["code"] = 1 send(ENTER_ROOM, msg_dict, session) table.logger.fatal( "room id map error: msg {0} actually {1}".format( room_id, table.room_id)) return from base.match_mgr import MatchMgr player = table.player_dict.get(player_id) if player: # 服务重启后player没有session if player.session: if session != player.session: player.table.logger.info( "player {0} cancel old session {1}".format( player_id, player.session.uuid)) # SessionMgr().cancel(player.session) player.session.close() SessionMgr().register(player, session) player.table.logger.info( "player {0} register new session {1}".format( player_id, player.session.uuid)) if player.seat == -1: seat = -1 for seat in range(table.chairs): if seat in table.seat_dict.keys(): continue break player.seat = seat MatchMgr().player_enter(player) player.reconnect() player.reload_extra() player.online_status(True) else: player = table.lookon_player_dict.get(player_id) if player and player.session and session != player.session: player.table.logger.info( "player {0} cancel old session {1}".format( player_id, player.session.uuid)) player.session.close() table.enter_room(player_id, info, session) Logger().local("ip.log", session.address[0] + ":" + str(session.address[1]))
def loot_dealer(msg_dict, session): player = SessionMgr().player(session) player.machine.cur_state.execute(player, "loot_dealer", msg_dict)