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"))
Esempio n. 2
0
    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()
Esempio n. 4
0
 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)
Esempio n. 5
0
def heartbeat():
    from base.table_mgr import TableMgr
    TableMgr().heartbeat()

    from base.session_mgr import SessionMgr
    SessionMgr().heartbeat()
Esempio n. 6
0
    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))
Esempio n. 7
0
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()
Esempio n. 17
0
    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)