Пример #1
0
        public static TCPCmdWrapper Get(TCPManager tcpMgr,
                                        TMSKSocket socket,
                                        TCPClientPool tcpClientPool,
                                        TCPRandKey tcpRandKey,
                                        TCPOutPacketPool pool,
                                        int nID,
                                        byte[] data,
                                        int count)
        {
            TCPCmdWrapper wrapper = null;

            lock (CachedWrapperList)
            {
                if (CachedWrapperList.Count > 0)
                {
                    wrapper               = CachedWrapperList.Dequeue();
                    wrapper.tcpMgr        = tcpMgr;
                    wrapper.socket        = socket;
                    wrapper.tcpClientPool = tcpClientPool;
                    wrapper.tcpRandKey    = tcpRandKey;
                    wrapper.pool          = pool;
                    wrapper.nID           = nID;
                    wrapper.data          = data;
                    wrapper.count         = count;
                }
            }
            if (null == wrapper)
            {
                wrapper = new TCPCmdWrapper(tcpMgr, socket, tcpClientPool, tcpRandKey, pool, nID, data, count);
            }
            return(wrapper);
        }
 public TCPProcessCmdResults ProcessMsg(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
 {
     tcpOutPacket = null;
     try
     {
         if (!this.CmdRegisteredFlags[nID])
         {
             return(TCPProcessCmdResults.RESUTL_CONTINUE);
         }
         List <MethodConfig> methodList = null;
         if (!this.patchCfgDict.TryGetValue(EventTypes.BeforeProcessMsg, out methodList))
         {
             return(TCPProcessCmdResults.RESUTL_CONTINUE);
         }
         if (methodList == null || methodList.Count <= 0)
         {
             return(TCPProcessCmdResults.RESUTL_CONTINUE);
         }
         foreach (MethodConfig item in methodList)
         {
             if (item.cmdID == nID)
             {
                 AssemblyLoader loader = this.GetAssemblyLoader(item.assemblyName);
                 if (null != loader)
                 {
                     int      index      = 8;
                     object[] paramarray = new object[item.methodParams.Length + index];
                     paramarray[0] = tcpMgr;
                     paramarray[1] = socket;
                     paramarray[2] = tcpClientPool;
                     paramarray[3] = tcpRandKey;
                     paramarray[4] = pool;
                     paramarray[5] = nID;
                     paramarray[6] = data;
                     paramarray[7] = count;
                     for (int i = 0; i < item.methodParams.Length; i++)
                     {
                         paramarray[i + index] = item.methodParams[i];
                     }
                     TcpResult result = (TcpResult)loader.Invoke(item.fullClassName, item.methodName, paramarray);
                     tcpOutPacket = result.outPacket;
                     return(result.cmdResult);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         LogManager.WriteLog(LogTypes.Error, string.Format("AssemblyPatchMgr::ProcessMsg Error nID={0}", nID), null, true);
     }
     return(TCPProcessCmdResults.RESUTL_CONTINUE);
 }
Пример #3
0
        public void release()
        {
            lock (CachedWrapperList)
            {
                if (CachedWrapperList.Count < MaxCachedWrapperCount)
                {
                    CachedWrapperList.Enqueue(this);
                    return;
                }
            }

            this.tcpMgr        = null;
            this.socket        = null;
            this.tcpClientPool = null;
            this.tcpRandKey    = null;
            this.pool          = null;
            this.data          = null;
            lock (CountLock)
            {
                TotalWrapperCount--;
            }
        }
Пример #4
0
        public TCPCmdWrapper(TCPManager tcpMgr,
                             TMSKSocket socket,
                             TCPClientPool tcpClientPool,
                             TCPRandKey tcpRandKey,
                             TCPOutPacketPool pool,
                             int nID,
                             byte[] data,
                             int count)
        {
            this.tcpMgr        = tcpMgr;
            this.socket        = socket;
            this.tcpClientPool = tcpClientPool;
            this.tcpRandKey    = tcpRandKey;
            this.pool          = pool;
            this.nID           = nID;
            this.data          = data;
            this.count         = count;

            lock (CountLock)
            {
                TotalWrapperCount++;
            }
        }
Пример #5
0
        public TCPProcessCmdResults ProcessQueryJieRiMeiRiPlatChargeKingCmd(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID), null, true);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            try
            {
                string[] fields = cmdData.Split(new char[]
                {
                    ':'
                });
                if (fields.Length != 1)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}", (TCPGameServerCmds)nID, fields.Length, cmdData), null, true);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                int        roleID = Convert.ToInt32(fields[0]);
                GameClient client = GameManager.ClientMgr.FindClient(socket);
                if (KuaFuManager.getInstance().ClientCmdCheckFaild(nID, client, ref roleID))
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false), roleID), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                JieriPlatChargeKingEverydayData myData = null;
                JieriPlatChargeKingEveryDay     act    = HuodongCachingMgr.GetJieriPCKingEveryDayActivity();
                if (act != null)
                {
                    myData = act.BuildQueryDataForClient(client);
                }
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, DataHelper.ObjectToBytes <JieriPlatChargeKingEverydayData>(myData), nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "", false, false);
            }
            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
            return(TCPProcessCmdResults.RESULT_DATA);
        }
Пример #6
0
        public TCPProcessCmdResults ProcessExecuteJieRiMeiRiPlatChargeKingCmd(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID), null, true);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            try
            {
                string[] fields = cmdData.Split(new char[]
                {
                    ':'
                });
                if (fields.Length != 2)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}", (TCPGameServerCmds)nID, fields.Length, cmdData), null, true);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                int        roleID = Convert.ToInt32(fields[0]);
                int        extTag = Global.SafeConvertToInt32(fields[1]);
                GameClient client = GameManager.ClientMgr.FindClient(socket);
                if (KuaFuManager.getInstance().ClientCmdCheckFaild(nID, client, ref roleID))
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false), roleID), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                Activity instActivity = Global.GetActivity(ActivityTypes.JieriPCKingEveryDay);
                string   strcmd;
                if (null == instActivity)
                {
                    strcmd       = string.Format("{0}:{1}:{2}", -1, roleID, extTag);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                if (!instActivity.CanGiveAward())
                {
                    strcmd       = string.Format("{0}:{1}:{2}", -2, roleID, extTag);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                if (!instActivity.CheckCondition(client, extTag))
                {
                    strcmd       = string.Format("{0}:{1}:{2}", -10007, roleID, extTag);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                if (!instActivity.HasEnoughBagSpaceForAwardGoods(client, extTag))
                {
                    strcmd       = string.Format("{0}:{1}:{2}", -3, roleID, extTag);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                if (!instActivity.GiveAward(client, extTag))
                {
                    strcmd       = string.Format("{0}:{1}:{2}", -7, roleID, extTag);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                strcmd       = string.Format("{0}:{1}:{2}", 1, roleID, extTag);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "", false, false);
            }
            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
            return(TCPProcessCmdResults.RESULT_DATA);
        }
Пример #7
0
        /// <summary>
        /// 设置二级密码
        /// </summary>
        public static TCPProcessCmdResults ProcessSetSecPwd(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;

            try
            {
                SetSecondPassword setReq = DataHelper.BytesToObject <SetSecondPassword>(data, 0, count);
                if (setReq == null)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("解析指令错误, cmd={0}", (int)nID));
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }

                GameClient client = GameManager.ClientMgr.FindClient(socket);
                if (null == client || client.ClientData.RoleID != setReq.RoleID)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket), setReq.RoleID));
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }

                // 如果1.4.1的功能没开放
                if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot4Dot1))
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("ProcessSetSecPwd功能尚未开放, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket), setReq.RoleID));
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }

                //旧的加密后的二级密码, 如果尚未设置,则为空
                SecPwdState         pwdState            = GetSecPwdState(client.strUserID);
                string              oldSecPwd_Encrypted = pwdState != null ? pwdState.SecPwd : null;
                SecondPasswordError error = SecondPasswordError.SecPwdSetSuccess;
                do
                {
                    if (!string.IsNullOrEmpty(oldSecPwd_Encrypted))
                    {
                        // 存在旧的二级密码,直接进行密文比较
                        if (setReq.OldSecPwd == null ||
                            oldSecPwd_Encrypted != setReq.OldSecPwd)
                        {
                            error = SecondPasswordError.SecPwdVerifyFailed;
                            break;
                        }
                    }

                    //解密后的新二级密码
                    string newSecPwd_Decrypted = SecondPasswordRC4.Decrypt(setReq.NewSecPwd);
                    if (string.IsNullOrEmpty(newSecPwd_Decrypted))
                    {
                        error = SecondPasswordError.SecPwdIsNull;
                        break;
                    }

                    if (!Regex.IsMatch(newSecPwd_Decrypted, "^[a-zA-Z0-9_]+$"))
                    {
                        error = SecondPasswordError.SecPwdCharInvalid;
                        break;
                    }

                    if (newSecPwd_Decrypted.Length < _PwdMinLen)
                    {
                        error = SecondPasswordError.SecPwdIsTooShort;
                        break;
                    }

                    if (newSecPwd_Decrypted.Length > _PwdMaxLen)
                    {
                        error = SecondPasswordError.SecPwdIsTooLong;
                        break;
                    }

                    //直接存储密文
                    string   cmd2db   = string.Format("{0}:{1}", client.strUserID, setReq.NewSecPwd);
                    string[] dbFields = Global.ExecuteDBCmd((int)TCPGameServerCmds.CMD_DB_UPDATE_USR_SECOND_PASSWORD, cmd2db, client.ServerId);
                    if (null == dbFields || dbFields.Length != 2)
                    {
                        error = SecondPasswordError.SecPwdDBFailed;
                        break;
                    }

                    error = SecondPasswordError.SecPwdSetSuccess;
                    break;
                } while (false);

                if (error == SecondPasswordError.SecPwdSetSuccess)
                {
                    // 设置二级密码成功了,更新状态
                    if (pwdState == null)
                    {
                        pwdState = new SecPwdState();
                    }
                    pwdState.SecPwd     = setReq.NewSecPwd;
                    pwdState.NeedVerify = false;
                    SetSecPwdState(client.strUserID, pwdState);
                }

                int has = 0, need = 0;
                if (pwdState != null)
                {
                    has  = 1;
                    need = pwdState.NeedVerify ? 1 : 0;
                }

                string rsp = string.Format("{0}:{1}:{2}:{3}", setReq.RoleID, (int)error, has, need);
                GameManager.ClientMgr.SendToClient(client, rsp, nID);
                return(TCPProcessCmdResults.RESULT_OK);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(socket), false);
            }

            return(TCPProcessCmdResults.RESULT_FAILED);
        }
Пример #8
0
        public static TCPProcessCmdResults ProcessGetYueKaAward(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, global::Server.Protocol.TCPOutPacketPool pool, int nID, byte[] data, int count, out global::Server.Protocol.TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            string[] fields = null;
            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}, Client={1}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket)));
                return(TCPProcessCmdResults.RESULT_FAILED);
            }

            try
            {
                fields = cmdData.Split(':');
                if (2 != fields.Length)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Client={1}, Recv={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket), fields.Length));
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }

                int        roleID = Convert.ToInt32(fields[0]);
                int        day    = Convert.ToInt32(fields[1]);
                GameClient client = GameManager.ClientMgr.FindClient(socket);
                if (null == client || client.ClientData.RoleID != roleID)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket), roleID));
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }

                YueKaError err = _GetYueKaAward(client, day);
                string     cmd = string.Format("{0}:{1}:{2}", roleID, (int)err, day);
                GameManager.ClientMgr.SendToClient(client, cmd, nID);
                return(TCPProcessCmdResults.RESULT_OK);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "ProcessGetYueKaData", false);
            }

            return(TCPProcessCmdResults.RESULT_DATA);
        }
Пример #9
0
        public static TCPProcessCmdResults ProcessSetSecPwd(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            try
            {
                SetSecondPassword setReq = DataHelper.BytesToObject <SetSecondPassword>(data, 0, count);
                if (setReq == null)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("解析指令错误, cmd={0}", nID), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                GameClient client = GameManager.ClientMgr.FindClient(socket);
                if (client == null || client.ClientData.RoleID != setReq.RoleID)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false), setReq.RoleID), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot4Dot1))
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("ProcessSetSecPwd功能尚未开放, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false), setReq.RoleID), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                SecPwdState         pwdState            = SecondPasswordManager.GetSecPwdState(client.strUserID);
                string              oldSecPwd_Encrypted = (pwdState != null) ? pwdState.SecPwd : null;
                SecondPasswordError error;
                if (!string.IsNullOrEmpty(oldSecPwd_Encrypted))
                {
                    if (setReq.OldSecPwd == null || oldSecPwd_Encrypted != setReq.OldSecPwd)
                    {
                        error = SecondPasswordError.SecPwdVerifyFailed;
                        goto IL_1F8;
                    }
                }
                string newSecPwd_Decrypted = SecondPasswordRC4.Decrypt(setReq.NewSecPwd);
                if (string.IsNullOrEmpty(newSecPwd_Decrypted))
                {
                    error = SecondPasswordError.SecPwdIsNull;
                }
                else if (!Regex.IsMatch(newSecPwd_Decrypted, "^[a-zA-Z0-9_]+$"))
                {
                    error = SecondPasswordError.SecPwdCharInvalid;
                }
                else if (newSecPwd_Decrypted.Length < 6)
                {
                    error = SecondPasswordError.SecPwdIsTooShort;
                }
                else if (newSecPwd_Decrypted.Length > 8)
                {
                    error = SecondPasswordError.SecPwdIsTooLong;
                }
                else
                {
                    string   cmd2db   = string.Format("{0}:{1}", client.strUserID, setReq.NewSecPwd);
                    string[] dbFields = Global.ExecuteDBCmd(10183, cmd2db, client.ServerId);
                    if (dbFields == null || dbFields.Length != 2)
                    {
                        error = SecondPasswordError.SecPwdDBFailed;
                    }
                    else
                    {
                        error = SecondPasswordError.SecPwdSetSuccess;
                    }
                }
IL_1F8:
                if (error == SecondPasswordError.SecPwdSetSuccess)
                {
                    if (pwdState == null)
                    {
                        pwdState = new SecPwdState();
                    }
                    pwdState.SecPwd     = setReq.NewSecPwd;
                    pwdState.NeedVerify = false;
                    SecondPasswordManager.SetSecPwdState(client.strUserID, pwdState);
                }
                int has  = 0;
                int need = 0;
                if (pwdState != null)
                {
                    has  = 1;
                    need = (pwdState.NeedVerify ? 1 : 0);
                }
                string rsp = string.Format("{0}:{1}:{2}:{3}", new object[]
                {
                    setReq.RoleID,
                    (int)error,
                    has,
                    need
                });
                GameManager.ClientMgr.SendToClient(client, rsp, nID);
                return(TCPProcessCmdResults.RESULT_OK);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(socket), false, false);
            }
            return(TCPProcessCmdResults.RESULT_FAILED);
        }
Пример #10
0
 public static TCPProcessCmdResults ProcessUsrVerify(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
 {
     tcpOutPacket = null;
     try
     {
         VerifySecondPassword verifyReq = DataHelper.BytesToObject <VerifySecondPassword>(data, 0, count);
         if (verifyReq == null)
         {
             LogManager.WriteLog(LogTypes.Error, string.Format("解析指令错误, cmd={0}", nID), null, true);
             return(TCPProcessCmdResults.RESULT_FAILED);
         }
         SecPwdState pwdState = SecondPasswordManager.GetSecPwdState(verifyReq.UserID);
         int         errcode;
         int         has;
         int         need;
         if (pwdState == null)
         {
             errcode = 0;
             has     = 0;
             need    = 0;
         }
         else if (string.IsNullOrEmpty(verifyReq.SecPwd) || verifyReq.SecPwd != pwdState.SecPwd)
         {
             errcode = 1;
             has     = 1;
             need    = 1;
         }
         else
         {
             errcode             = 0;
             has                 = 1;
             need                = 0;
             pwdState.NeedVerify = false;
         }
         string rsp = string.Format("{0}:{1}:{2}", errcode, has, need);
         tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, rsp, nID);
         return(TCPProcessCmdResults.RESULT_DATA);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(socket), false, false);
     }
     return(TCPProcessCmdResults.RESULT_FAILED);
 }
Пример #11
0
        public static TCPProcessCmdResults ProcessUsrCheckState(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}, Client={1}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false)), null, true);
                return(TCPProcessCmdResults.RESULT_FAILED);
            }
            try
            {
                string[] fields = cmdData.Split(new char[]
                {
                    ':'
                });
                if (2 != fields.Length)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Client={1}, Recv={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false), fields.Length), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                string      userid   = fields[0];
                SecPwdState pwdState = SecondPasswordManager.GetSecPwdState(userid);
                string      cmdRsp;
                if (pwdState != null)
                {
                    cmdRsp = string.Format("{0}:{1}", 1, pwdState.NeedVerify ? 1 : 0);
                }
                else
                {
                    cmdRsp = string.Format("{0}:{1}", 0, 0);
                }
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, cmdRsp, nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(socket), false, false);
            }
            return(TCPProcessCmdResults.RESULT_FAILED);
        }
Пример #12
0
 public static TCPProcessCmdResults ProcClrSecPwd(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
 {
     tcpOutPacket = null;
     try
     {
         VerifySecondPassword verifyReq = DataHelper.BytesToObject <VerifySecondPassword>(data, 0, count);
         if (verifyReq == null)
         {
             LogManager.WriteLog(LogTypes.Error, string.Format("解析指令错误, cmd={0}", nID), null, true);
             return(TCPProcessCmdResults.RESULT_FAILED);
         }
         string uid = GameManager.OnlineUserSession.FindUserID(socket);
         if (string.IsNullOrEmpty(uid) || string.IsNullOrEmpty(verifyReq.UserID) || uid != verifyReq.UserID)
         {
             LogManager.WriteLog(LogTypes.Error, string.Format("玩家请求清除二级密码,但是玩家发送的uid错误, {0}", Global.GetSocketRemoteEndPoint(socket, false)), null, true);
             return(TCPProcessCmdResults.RESULT_FAILED);
         }
         SecPwdState pwdState = SecondPasswordManager.GetSecPwdState(verifyReq.UserID);
         int         errcode;
         if (pwdState == null)
         {
             errcode = 2;
         }
         else if (string.IsNullOrEmpty(verifyReq.SecPwd) || verifyReq.SecPwd != pwdState.SecPwd)
         {
             errcode = 1;
         }
         else if (!SecondPasswordManager.ClearUserSecPwd(verifyReq.UserID))
         {
             errcode = 8;
         }
         else
         {
             errcode = 9;
         }
         tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, errcode.ToString(), nID);
         return(TCPProcessCmdResults.RESULT_DATA);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(socket), false, false);
     }
     return(TCPProcessCmdResults.RESULT_FAILED);
 }
Пример #13
0
        public TCPProcessCmdResults ProcessChangeName(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID), null, true);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            try
            {
                string[] fields = cmdData.Split(new char[]
                {
                    ':'
                });
                if (fields.Length != 3)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}", (TCPGameServerCmds)nID, fields.Length, cmdData), null, true);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                int    roleId  = Convert.ToInt32(fields[0]);
                int    zoneId  = Convert.ToInt32(fields[1]);
                string newName = fields[2];
                string uid     = GameManager.OnlineUserSession.FindUserID(socket);
                if (string.IsNullOrEmpty(uid))
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("角色改名时,找不到socket对应的uid,其中roleid={0},zoneid={1},newname={2}", roleId, zoneId, newName), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                ChangeNameResult result = new ChangeNameResult();
                if (socket.IsKuaFuLogin || GameManager.ClientMgr.FindClient(socket) != null)
                {
                    result.ErrCode = 11;
                }
                else
                {
                    result.ErrCode = (int)this.HandleChangeName(uid, zoneId, roleId, newName);
                }
                result.ZoneId   = zoneId;
                result.NewName  = newName;
                result.NameInfo = this.GetChangeNameInfo(uid, zoneId, socket.ServerId);
                tcpOutPacket    = DataHelper.ObjectToTCPOutPacket <ChangeNameResult>(result, pool, nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "", false, false);
            }
            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
            return(TCPProcessCmdResults.RESULT_DATA);
        }
Пример #14
0
        public TCPProcessCmdResults ProcessChangeBangHuiName(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID), null, true);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            try
            {
                string[] fields = cmdData.Split(new char[]
                {
                    ':'
                });
                if (fields.Length != 2)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}", (TCPGameServerCmds)nID, fields.Length, cmdData), null, true);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                int        roleId  = Convert.ToInt32(fields[0]);
                string     newName = fields[1];
                GameClient client  = GameManager.ClientMgr.FindClient(socket);
                if (KuaFuManager.getInstance().ClientCmdCheckFaild(nID, client, ref roleId))
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false), roleId), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                if (client.ClientSocket.IsKuaFuLogin)
                {
                    return(TCPProcessCmdResults.RESULT_OK);
                }
                if (client.ClientData.Faction <= 0)
                {
                    return(TCPProcessCmdResults.RESULT_OK);
                }
                EChangeGuildNameError ne = this.HandleChangeBangHuiName(client, newName);
                string rsp = string.Format("{0}:{1}:{2}", (int)ne, client.ClientData.Faction, newName);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(TCPOutPacketPool.getInstance(), rsp, nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "", false, false);
            }
            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
            return(TCPProcessCmdResults.RESULT_DATA);
        }
Пример #15
0
        public TCPProcessCmdResults AttchFun(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey,
                                             TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            TCPProcessCmdResults result = TCPProcessCmdResults.RESULT_FAILED;

            tcpOutPacket = null;
            try
            {
                if (m_FunInsinuate.ContainsKey(nID))
                {
                    result = m_FunInsinuate[nID](tcpMgr, socket, tcpClientPool, tcpRandKey, pool, nID, data, count, out tcpOutPacket);
                }
                else
                {
                    SysConOut.WriteLine("收到APP数据,但没找到隐射函数");
                }
                GameClient client = GameManager.ClientMgr.FindClient(socket);
                if (null != client)
                {
                    client.ClientData.LastClientHeartTicks = TimeUtil.NOW();
                }
            }
            catch (Exception ex)
            {
                SysConOut.WriteLine("AttchFun****************" + ex.ToString());
            }

            return(result);
        }
Пример #16
0
        public static void CCProcessCmd(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count)
        {
            //接收到了完整的命令包
            //TCPOutPacket tcpOutPacket = null;
            //TCPProcessCmdResults result = TCPProcessCmdResults.RESULT_FAILED;

            //result = TCPCmdHandler.ProcessCmd(tcpMgr, socket, tcpClientPool, tcpRandKey, pool, nID, data, count, out tcpOutPacket);

            //if (result == TCPProcessCmdResults.RESULT_DATA && null != tcpOutPacket)
            //{
            //    //向登陆客户端返回数据
            //    tcpMgr.MySocketListener.SendData(socket, tcpOutPacket);
            //}
            //else if (result == TCPProcessCmdResults.RESULT_FAILED)//解析失败, 直接关闭连接
            //{
            //    if (nID != (int)TCPGameServerCmds.CMD_LOG_OUT)
            //    {
            //        LogManager.WriteLog(LogTypes.Error, string.Format("解析并执行命令失败: {0},{1}, 关闭连接", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket)));
            //    }

            //    //这儿需要关闭链接--->这样关闭对吗?
            //    tcpMgr.MySocketListener.CloseSocket(socket);
            //}
        }
Пример #17
0
        public TCPProcessCmdResults HandleClientQueryPlatChargeKing(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception) //解析错误
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID));

                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN);
                return(TCPProcessCmdResults.RESULT_DATA);
            }

            try
            {
                string[] fields = cmdData.Split(':');
                if (fields.Length != 1)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}",
                                                                      (TCPGameServerCmds)nID, fields.Length, cmdData));

                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }

                int roleID = Convert.ToInt32(fields[0]);

                GameClient client = GameManager.ClientMgr.FindClient(socket);
                if (null == client || client.ClientData.RoleID != roleID)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket), roleID));
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }

                JieriPlatChargeKing act = HuodongCachingMgr.GetJieriPlatChargeKingActivity();
                if (act != null)
                {
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, DataHelper.ObjectToBytes <List <InputKingPaiHangData> >(act.RealRankList), nID);
                }

                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "", false);
            }

            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN);
            return(TCPProcessCmdResults.RESULT_DATA);
        }
Пример #18
0
        public static TCPProcessCmdResults CCProcessCmd(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            //if (nID > 30000)
            //    SysConOut.WriteLine("接收:" + nID + "|" + ConvertEnumToString<CC.CommandID>(nID));

            //测试用
            //System.Diagnostics.Debug.WriteLine("ProcessCmd: {0}", (TCPGameServerCmds)nID);
            long startTicks = TimeUtil.NOW();

            //加入统计
            lock (HandlingCmdDict)
            {
                HandlingCmdDict[socket] = 1;
            }
            TCPProcessCmdResults result = TCPProcessCmdResults.RESULT_FAILED;

            tcpOutPacket = null;

            //记录最后一次消息id,事件,总消息数量
            socket.session.CmdID   = nID;
            socket.session.CmdTime = startTicks;

            #region 指令处理

            result = TCPCmdDispatcher.getInstance().dispathProcessor(socket, nID, data, count);

            if (result == TCPProcessCmdResults.RESULT_UNREGISTERED)
            {
                result = CMDProcess.GetInstance.AttchFun(tcpMgr, socket, tcpClientPool, tcpRandKey, pool, nID, data, count, out tcpOutPacket);
            }
            #endregion
            /// 总共处理的指令个数
            TotalHandledCmdsNum++;

            //测试用
            long nowTicks  = TimeUtil.NOW();
            long usedTicks = nowTicks - startTicks;
            // SysConOut.WriteLine(string.Format("ProcessCmd: {0}, ticks: {1}", (TCPGameServerCmds)nID, usedTicks));
            if (usedTicks > 0)
            {
                //LogManager.WriteLog(LogTypes.Error, string.Format("指令处理时间, CMD={0}, Client={1}, Ticks={2}",
                //(TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket), nowTicks - startTicks));

                if (usedTicks > MaxUsedTicksByCmdID)
                {
                    MaxUsedTicksCmdID   = nID;
                    MaxUsedTicksByCmdID = usedTicks;
                }
            }

            //删除统计
            lock (HandlingCmdDict)
            {
                HandlingCmdDict.Remove(socket);
            }

            //Thread.Sleep((int)Global.GetRandomNumber(100, 250)); ///模拟卡顿的操作

            return(result);
        }
Пример #19
0
        public static TCPProcessCmdResults ProcessGetYueKaData(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}, Client={1}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false)), null, true);
                return(TCPProcessCmdResults.RESULT_FAILED);
            }
            try
            {
                string[] fields = cmdData.Split(new char[]
                {
                    ':'
                });
                if (1 != fields.Length)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Client={1}, Recv={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false), fields.Length), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                int        roleID = Convert.ToInt32(fields[0]);
                GameClient client = GameManager.ClientMgr.FindClient(socket);
                if (KuaFuManager.getInstance().ClientCmdCheckFaild(nID, client, ref roleID))
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false), roleID), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                YueKaData ykData = null;
                lock (client.ClientData.YKDetail)
                {
                    ykData = client.ClientData.YKDetail.ToYueKaData();
                }
                GameManager.ClientMgr.SendToClient(client, DataHelper.ObjectToBytes <YueKaData>(ykData), nID);
                return(TCPProcessCmdResults.RESULT_OK);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "ProcessGetYueKaData", false, false);
            }
            return(TCPProcessCmdResults.RESULT_DATA);
        }
Пример #20
0
        /// <summary>
        /// 客户端请求user的二级密码状态
        /// </summary>
        public static TCPProcessCmdResults ProcessUsrCheckState(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;

            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}, Client={1}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket)));
                return(TCPProcessCmdResults.RESULT_FAILED);
            }

            try
            {
                // usrid:zoneid
                string[] fields = cmdData.Split(':');
                if (2 != fields.Length)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Client={1}, Recv={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket), fields.Length));
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }

                string userid = fields[0];

                /*
                 * 在CMD_LOGIN_ON的时候,会初始化usrid对应的二级密码状态
                 * 所以客户端请求二级密码状态时,已经被正确初始化
                 * 服务器返回has:need
                 * has:是否有二级密码
                 * need:是否需要验证二级密码
                 */
                SecPwdState pwdState = GetSecPwdState(userid);
                string      cmdRsp   = null;
                if (pwdState != null)
                {
                    cmdRsp = string.Format("{0}:{1}", 1, pwdState.NeedVerify ? 1 : 0);
                }
                else
                {
                    cmdRsp = string.Format("{0}:{1}", 0, 0);
                }

                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, cmdRsp, nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(socket), false);
            }

            return(TCPProcessCmdResults.RESULT_FAILED);
        }