public static PlayLogic_Relax getInstance()
    {
        if (s_playLogic_Normal == null)
        {
            s_playLogic_Normal = new PlayLogic_Relax();
        }

        return(s_playLogic_Normal);
    }
    public static bool checkPlayerIsInRoom(string uid)
    {
        bool b = false;

        // 先在休闲场里找
        for (int i = 0; i < PlayLogic_Relax.getInstance().getRoomList().Count; i++)
        {
            List <PlayerData> playerDataList = PlayLogic_Relax.getInstance().getRoomList()[i].getPlayerDataList();

            for (int j = 0; j < playerDataList.Count; j++)
            {
                if (playerDataList[j].m_uid.CompareTo(uid) == 0)
                {
                    b = true;
                    break;
                }
            }
        }

        // 然后在比赛场里找
        if (!b)
        {
            for (int i = 0; i < PlayLogic_PVP.getInstance().getRoomList().Count; i++)
            {
                List <PlayerData> playerDataList = PlayLogic_PVP.getInstance().getRoomList()[i].getPlayerDataList();

                for (int j = 0; j < playerDataList.Count; j++)
                {
                    if (playerDataList[j].m_uid.CompareTo(uid) == 0)
                    {
                        b = true;
                        break;
                    }
                }
            }
        }

        return(b);
    }
    public static PlayerData getPlayerDataByConnId(IntPtr connId)
    {
        PlayerData playerData = null;

        // 先在休闲场里找
        for (int i = 0; i < PlayLogic_Relax.getInstance().getRoomList().Count; i++)
        {
            List <PlayerData> playerDataList = PlayLogic_Relax.getInstance().getRoomList()[i].getPlayerDataList();

            for (int j = 0; j < playerDataList.Count; j++)
            {
                if (playerDataList[j].m_connId == connId)
                {
                    playerData = playerDataList[j];

                    return(playerData);
                }
            }
        }

        // 然后在比赛场里找
        for (int i = 0; i < PlayLogic_PVP.getInstance().getRoomList().Count; i++)
        {
            List <PlayerData> playerDataList = PlayLogic_PVP.getInstance().getRoomList()[i].getPlayerDataList();

            for (int j = 0; j < playerDataList.Count; j++)
            {
                if (playerDataList[j].m_connId == connId)
                {
                    playerData = playerDataList[j];

                    return(playerData);
                }
            }
        }

        return(playerData);
    }
    public static PlayerData getPlayerDataByUid(string uid)
    {
        PlayerData playerData = null;

        // 先在休闲场里找
        for (int i = 0; i < PlayLogic_Relax.getInstance().getRoomList().Count; i++)
        {
            List <PlayerData> playerDataList = PlayLogic_Relax.getInstance().getRoomList()[i].getPlayerDataList();

            for (int j = 0; j < playerDataList.Count; j++)
            {
                if (playerDataList[j].m_uid.CompareTo(uid) == 0)
                {
                    playerData = playerDataList[j];

                    return(playerData);
                }
            }
        }

        // 然后在比赛场里找
        for (int i = 0; i < PlayLogic_PVP.getInstance().getRoomList().Count; i++)
        {
            List <PlayerData> playerDataList = PlayLogic_PVP.getInstance().getRoomList()[i].getPlayerDataList();

            for (int j = 0; j < playerDataList.Count; j++)
            {
                if (playerDataList[j].m_uid.CompareTo(uid) == 0)
                {
                    playerData = playerDataList[j];

                    return(playerData);
                }
            }
        }

        return(playerData);
    }
        static void onTimer(object data)
        {
            int year  = CommonUtil.getCurYear();
            int month = CommonUtil.getCurMonth();
            int day   = CommonUtil.getCurDay();
            int hour  = CommonUtil.getCurHour();
            int min   = CommonUtil.getCurMinute();
            int sec   = CommonUtil.getCurSecond();

            if ((hour == 19) || (hour == 20) || (hour == 21) || (hour == 22))
            {
                if ((min == 0) && (sec == 0))
                {
                    PlayLogic_Relax.getInstance().sendBaoXiang();
                    LogUtil.getInstance().addDebugLog("GlobalTimer:掉落宝箱------" + hour + ":" + min + ":" + sec);
                }
            }

            if ((day == 1) && (hour == 0) && (min == 0) && (sec == 0))
            {
                Request_RefreshAllData.doRequest();
                LogUtil.getInstance().addDebugLog("GlobalTimer:到月初了,刷新配置表");
            }
        }
    void hasPlayerExit(object obj)
    {
        IntPtr connId = (IntPtr)obj;

        PlayerData playerData = GameUtil.getPlayerDataByConnId(connId);

        if (playerData == null)
        {
            LogUtil.getInstance().addDebugLog("踢出玩家失败,找不到IntPtr:" + connId + "对应的玩家");
            return;
        }

        if (PlayLogic_Relax.getInstance().doTaskPlayerCloseConn(playerData.m_uid))
        {
            // 日志
            {
                if (playerData != null)
                {
                    RoomData room = GameUtil.getRoomByUid(playerData.m_uid);
                    if (room != null)
                    {
                        LogUtil.getInstance().writeRoomLog(room, "踢出玩家成功:" + connId);
                    }
                    else
                    {
                        LogUtil.getInstance().addDebugLog("踢出玩家成功:" + connId);
                    }
                }
                else
                {
                    LogUtil.getInstance().addDebugLog("踢出玩家成功:" + connId);
                }
            }
        }
        else if (PlayLogic_PVP.getInstance().doTaskPlayerCloseConn(playerData.m_uid))
        {
            // 日志
            {
                if (playerData != null)
                {
                    RoomData room = GameUtil.getRoomByUid(playerData.m_uid);
                    if (room != null)
                    {
                        LogUtil.getInstance().writeRoomLog(room, "踢出玩家成功:" + connId);
                    }
                    else
                    {
                        LogUtil.getInstance().addDebugLog("踢出玩家成功:" + connId);
                    }
                }
                else
                {
                    LogUtil.getInstance().addDebugLog("踢出玩家成功:" + connId);
                }
            }
        }
        else
        {
            LogUtil.getInstance().addDebugLog("踢出玩家失败,找不到该玩家:" + connId);
        }
    }
 public int getRoomCount()
 {
     return(PlayLogic_Relax.getInstance().getRoomCount());
 }
    // 处理客户端的请求
    void doAskCilentReq(object obj)
    {
        ReceiveObj receiveObj = (ReceiveObj)obj;
        string     text       = receiveObj.m_data;

        // 日志
        {
            PlayerData playerData = GameUtil.getPlayerDataByConnId(receiveObj.m_connId);
            if (playerData != null)
            {
                RoomData room = GameUtil.getRoomByUid(playerData.m_uid);
                if (room != null)
                {
                    LogUtil.getInstance().writeRoomLog(room, "收到客户端消息:" + text);
                }
                else
                {
                    LogUtil.getInstance().addDebugLog("收到客户端消息:" + text);
                }
            }
            else
            {
                LogUtil.getInstance().addDebugLog("收到客户端消息:" + text);
            }
        }

        JObject jo;

        try
        {
            jo = JObject.Parse(text);
        }
        catch (JsonReaderException ex)
        {
            // 传过来的数据不是json格式的,一律不理
            // 日志
            {
                PlayerData playerData = GameUtil.getPlayerDataByConnId(receiveObj.m_connId);
                if (playerData != null)
                {
                    RoomData room = GameUtil.getRoomByUid(playerData.m_uid);
                    if (room != null)
                    {
                        LogUtil.getInstance().writeRoomLog(room, "客户端传来非json数据:" + text);
                    }
                    else
                    {
                        LogUtil.getInstance().addDebugLog("客户端传来非json数据:" + text);
                    }
                }
                else
                {
                    LogUtil.getInstance().addDebugLog("客户端传来非json数据:" + text);
                }
            }

            m_endStr = "";

            return;
        }

        if (jo.GetValue("tag") != null)
        {
            string tag = jo.GetValue("tag").ToString();

            // 休闲场相关
            if (tag.CompareTo(TLJCommon.Consts.Tag_XiuXianChang) == 0)
            {
                PlayLogic_Relax.getInstance().OnReceive(receiveObj.m_connId, text);
            }
            // 比赛场相关
            else if (tag.CompareTo(TLJCommon.Consts.Tag_JingJiChang) == 0)
            {
                PlayLogic_PVP.getInstance().OnReceive(receiveObj.m_connId, text);
            }
            // 获取pvp场次信息
            else if (tag.CompareTo(TLJCommon.Consts.Tag_GetPVPGameRoom) == 0)
            {
                NetRespond_GetPVPGameRoom.doAskCilentReq_GetPVPGameRoom(receiveObj.m_connId, text);
            }
            // 请求服务器在线玩家信息接口
            else if (tag.CompareTo(TLJCommon.Consts.Tag_OnlineInfo) == 0)
            {
                NetRespond_OnlineInfo.doAskCilentReq_OnlineInfo(receiveObj.m_connId, text);
            }
            // 使用buff
            else if (tag.CompareTo(TLJCommon.Consts.Tag_UseBuff) == 0)
            {
                NetRespond_UseBuff.doAskCilentReq_UseBuff(receiveObj.m_connId, text);
            }
            // 是否已经加入游戏
            else if (tag.CompareTo(TLJCommon.Consts.Tag_IsJoinGame) == 0)
            {
                NetRespond_IsJoinGame.doAskCilentReq_IsJoinGame(receiveObj.m_connId, text);
            }
            // 请求恢复房间
            else if (tag.CompareTo(TLJCommon.Consts.Tag_RetryJoinGame) == 0)
            {
                NetRespond_RetryJoinGame.doAskCilentReq_RetryJoinGame(receiveObj.m_connId, text);
            }
            // 自定义牌型
            else if (tag.CompareTo(TLJCommon.Consts.Tag_DebugSetPoker) == 0)
            {
                NetRespond_DebugSetPoker.doAskCilentReq_DebugSetPoker(receiveObj.m_connId, text);
            }
            // 心跳
            else if (tag.CompareTo(TLJCommon.Consts.Tag_HeartBeat_Play) == 0)
            {
                NetRespond_HeartBeat_Play.doAskCilentReq_HeartBeat_Play(receiveObj.m_connId, text);
            }
            // 解散房间
            else if (tag.CompareTo(TLJCommon.Consts.Tag_BreakRoom) == 0)
            {
                NetRespond_BreakRoom.doAskCilentReq_BreakRoom(receiveObj.m_connId, text);
            }
            // 斗地主相关
            else if (tag.CompareTo(TLJCommon.Consts.Tag_DouDiZhu_Game) == 0)
            {
                PlayLogic_DDZ.getInstance().OnReceive(receiveObj.m_connId, text);
            }
            // 未知Tag
            else
            {
                LogUtil.getInstance().addDebugLog("未知Tag:" + tag);
            }
        }
        else
        {
            // 传过来的数据没有tag字段的,一律不理
            // 日志
            {
                PlayerData playerData = GameUtil.getPlayerDataByConnId(receiveObj.m_connId);
                if (playerData != null)
                {
                    RoomData room = GameUtil.getRoomByUid(playerData.m_uid);
                    if (room != null)
                    {
                        LogUtil.getInstance().writeRoomLog(room, "客户端传来的数据没有Tag:" + text);
                    }
                    else
                    {
                        LogUtil.getInstance().addDebugLog("客户端传来的数据没有Tag:" + text);
                    }
                }
                else
                {
                    LogUtil.getInstance().addDebugLog("客户端传来的数据没有Tag:" + text);
                }
            }
            return;
        }
    }
    public static string doAskCilentReq_OnlineInfo(IntPtr connId, string reqData)
    {
        JObject respondJO = new JObject();

        try
        {
            JObject jo  = JObject.Parse(reqData);
            string  tag = jo.GetValue("tag").ToString();
            respondJO.Add("tag", tag);

            string key = jo.GetValue("key").ToString();

            if (key.CompareTo("jinyou123") == 0)
            {
                respondJO.Add("code", Convert.ToInt32(TLJCommon.Consts.Code.Code_OK));
                respondJO.Add("onlineCount", PlayService.m_serverUtil.getOnlinePlayerCount());
                respondJO.Add("roomCount", PlayService.m_serverUtil.getRoomCount());

                JArray ja = new JArray();
                for (int i = 0; i < PlayLogic_Relax.getInstance().getRoomList().Count; i++)
                {
                    JObject temp = new JObject();
                    temp.Add("room_id", PlayLogic_Relax.getInstance().getRoomList()[i].getRoomId());
                    temp.Add("room_state", (int)PlayLogic_Relax.getInstance().getRoomList()[i].getRoomState());

                    string str = "";
                    for (int j = 0; j < PlayLogic_Relax.getInstance().getRoomList()[i].getPlayerDataList().Count; j++)
                    {
                        str += PlayLogic_Relax.getInstance().getRoomList()[i].getPlayerDataList()[j].m_uid;
                        str += " ; ";
                    }
                    temp.Add("uid_list", str);

                    ja.Add(temp);
                }
                respondJO.Add("roomList", ja);

                // 发送给客户端
                PlayService.m_serverUtil.sendMessage(connId, respondJO.ToString());
            }
            else
            {
                // 客户端参数错误
                respondJO.Add("code", Convert.ToInt32(TLJCommon.Consts.Code.Code_ParamError));

                // 发送给客户端
                PlayService.m_serverUtil.sendMessage(connId, respondJO.ToString());
            }
        }
        catch (Exception ex)
        {
            // 客户端参数错误
            respondJO.Add("code", Convert.ToInt32(TLJCommon.Consts.Code.Code_ParamError));

            // 发送给客户端
            PlayService.m_serverUtil.sendMessage(connId, respondJO.ToString());
        }

        //return respondJO.ToString();
        return("");
    }