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); }
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--; } }
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++; } }
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); }
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); }
/// <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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); //} }
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); }
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); }
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); }
/// <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); }