public void SpriteHeart() { String strcmd = ""; strcmd = string.Format("{0}:{1}:{2}", RoleID, Token, DateTime.Now.Ticks / 10000); _tcpClient.SendData(TCPOutPacket.MakeTCPOutPacket(strcmd, (int)(TCPGameServerCmds.CMD_SPR_CLIENTHEART))); }
public static TCPProcessCmdResults ProcessDBUpdateUserLimitGoodsUsedNumCmd(DBManager dbMgr, 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 != 5) { 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 goodsID = Convert.ToInt32(fields[1]); int dayID = Convert.ToInt32(fields[2]); int usedNum = Convert.ToInt32(fields[3]); string stage = fields[4]; DBRoleInfo dbRoleInfo = dbMgr.GetDBRoleInfo(ref roleID); if (null == dbRoleInfo) { LogManager.WriteLog(LogTypes.Error, string.Format("发起请求的角色不存在,CMD={0}, RoleID={1}", (TCPGameServerCmds)nID, roleID), null, true); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767); return(TCPProcessCmdResults.RESULT_DATA); } int ret = DBWriter.AddUserLimitGoodsBuyItem(dbMgr, dbRoleInfo.UserID, goodsID, dayID, usedNum, stage); string strcmd; if (ret < 0) { strcmd = string.Format("{0}:{1}", roleID, -1); LogManager.WriteLog(LogTypes.Error, string.Format("添加限购物品的历史记录失败,CMD={0}, RoleID={1}", (TCPGameServerCmds)nID, roleID), null, true); } else { strcmd = string.Format("{0}:{1}", roleID, 0); } 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); }
public static TCPProcessCmdResults ProcessUpdateOrnamentDataCmd(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket) { tcpOutPacket = null; try { OrnamentUpdateDbData dbData = DataHelper.BytesToObject <OrnamentUpdateDbData>(data, 0, count); DBRoleInfo dbRoleInfo = dbMgr.GetDBRoleInfo(ref dbData.RoleId); if (null == dbRoleInfo) { LogManager.WriteLog(LogTypes.Error, string.Format("发起请求的角色不存在,CMD={0}, RoleID={1}", (TCPGameServerCmds)nID, dbData.RoleId), null, true); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767); return(TCPProcessCmdResults.RESULT_DATA); } lock (dbRoleInfo) { if (null == dbRoleInfo.OrnamentDataDict) { dbRoleInfo.OrnamentDataDict = new Dictionary <int, OrnamentData>(); } dbRoleInfo.OrnamentDataDict[dbData.Data.ID] = dbData.Data; } DBWriter.UpdateOramentData(dbMgr, dbData); tcpOutPacket = DataHelper.ObjectToTCPOutPacket <bool>(true, pool, nID); return(TCPProcessCmdResults.RESULT_DATA); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, "", false, false); } tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767); return(TCPProcessCmdResults.RESULT_DATA); }
/// <summary> /// 获取领地信息字典项的发送tcp对象 /// </summary> public TCPOutPacket GetBangHuiLingDiItemsDictTCPOutPacket(TCPOutPacketPool pool, int cmdID) { Dictionary <int, BangHuiLingDiItemData> bangHuiLingDiItemDataDict = new Dictionary <int, BangHuiLingDiItemData>(); BangHuiLingDiInfoData bangHuiLingDiInfoData = null; lock (_BangHuiLingDiItemsDict) { foreach (var key in _BangHuiLingDiItemsDict.Keys) { bangHuiLingDiInfoData = _BangHuiLingDiItemsDict[key]; bangHuiLingDiItemDataDict[key] = new BangHuiLingDiItemData() { LingDiID = bangHuiLingDiInfoData.LingDiID, BHID = bangHuiLingDiInfoData.BHID, ZoneID = bangHuiLingDiInfoData.ZoneID, BHName = bangHuiLingDiInfoData.BHName, LingDiTax = bangHuiLingDiInfoData.LingDiTax, WarRequest = bangHuiLingDiInfoData.WarRequest, AwardFetchDay = bangHuiLingDiInfoData.AwardFetchDay, }; } } TCPOutPacket tcpOutPacket = DataHelper.ObjectToTCPOutPacket <Dictionary <int, BangHuiLingDiItemData> >(bangHuiLingDiItemDataDict, pool, cmdID); return(tcpOutPacket); }
/// <summary> /// 申请当前是否庆功宴已经开启了 /// </summary> public TCPProcessCmdResults ProcessCMD_SPR_QueryQingGongYanOpenCMD(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, 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 { int result = (QingGongYanNpc == null) ? 0 : 1; string strcmd = string.Format("{0}", result); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, "ProcessJoinQingGongYanCMD", false); } return(TCPProcessCmdResults.RESULT_FAILED); }
internal bool SendData(TMSKSocket s, TCPOutPacket tcpOutPacket, bool pushBack = true) { if (s != null && tcpOutPacket != null) { ushort sendCmdId = tcpOutPacket.PacketCmdID; if (s.magic > 0 && sendCmdId > 100) { sendCmdId += s.magic; } Array.Copy(BitConverter.GetBytes(sendCmdId), 0, tcpOutPacket.GetPacketBytes(), 4, 2); } bool bRet = false; if (null != s) { if (s.Connected) { bRet = Global._SendBufferManager.AddOutPacket(s, tcpOutPacket); } } if (pushBack) { Global._TCPManager.TcpOutPacketPool.Push(tcpOutPacket); } return(bRet); }
private bool TCPCmdPacketEvent(object sender) { TCPInPacket tcpInPacket = sender as TCPInPacket; TCPOutPacket tcpOutPacket = null; int flag = 0; bool result2; if (!this.inputServers.TryGetValue(tcpInPacket.CurrentSocket, out flag)) { LogManager.WriteLog(LogTypes.Error, string.Format("未建立会话或会话已关闭: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket)), null, true); result2 = false; } else { long processBeginTime = TimeUtil.NowEx(); TCPProcessCmdResults result = PlatTCPManager.ProcessCmd(tcpInPacket.CurrentSocket, this.tcpOutPacketPool, (int)tcpInPacket.PacketCmdID, tcpInPacket.GetPacketBytes(), tcpInPacket.PacketDataSize, out tcpOutPacket); long processTime = TimeUtil.NowEx() - processBeginTime; if (result == TCPProcessCmdResults.RESULT_DATA && null != tcpOutPacket) { this.socketListener.SendData(tcpInPacket.CurrentSocket, tcpOutPacket); } else if (result == TCPProcessCmdResults.RESULT_FAILED) { LogManager.WriteLog(LogTypes.Error, string.Format("解析并执行命令失败: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket)), null, true); return(false); } result2 = true; } return(result2); }
public static TCPProcessCmdResults ProcTalentModify(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket) { tcpOutPacket = null; string[] fields = null; try { int length = 6; if (!CheckHelper.CheckTCPCmdFields(nID, data, count, out fields, length)) { tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, 1.ToString(), nID); return(TCPProcessCmdResults.RESULT_DATA); } int roleID = Convert.ToInt32(fields[0]); int totalCount = Convert.ToInt32(fields[1]); long exp = Convert.ToInt64(fields[2]); long expAdd = Convert.ToInt64(fields[3]); int isUp = Convert.ToInt32(fields[4]); int zoneID = Convert.ToInt32(fields[5]); string strcmd = TalentManager.TalentInfoModify(dbMgr, roleID, totalCount, exp, expAdd, isUp, zoneID); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, "", false, false); } tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, 1.ToString(), nID); return(TCPProcessCmdResults.RESULT_DATA); }
internal bool SendData(Socket s, TCPOutPacket tcpOutPacket) { SocketAsyncEventArgs writeEventArgs = this.writePool.Pop(); if (null == writeEventArgs) { writeEventArgs = new SocketAsyncEventArgs(); writeEventArgs.Completed += this.OnIOCompleted; writeEventArgs.UserToken = new AsyncUserToken { CurrentSocket = null, Tag = null }; } writeEventArgs.SetBuffer(tcpOutPacket.GetPacketBytes(), 0, tcpOutPacket.PacketDataSize); (writeEventArgs.UserToken as AsyncUserToken).CurrentSocket = s; (writeEventArgs.UserToken as AsyncUserToken).Tag = tcpOutPacket; bool exception = false; if (!this._SendAsync(writeEventArgs, out exception)) { this.ProcessSend(writeEventArgs); } return(!exception); }
private bool TCPCmdPacketEvent(object sender) { TCPInPacket tcpInPacket = sender as TCPInPacket; TCPOutPacket tcpOutPacket = null; GameServerClient client = null; bool result2; if (!this.gameServerClients.TryGetValue(tcpInPacket.CurrentSocket, out client)) { LogManager.WriteLog(LogTypes.Error, string.Format("未建立会话或会话已关闭: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket))); result2 = false; } else { TCPProcessCmdResults result = TCPCmdHandler.ProcessCmd(client, this.DBMgr, this.tcpOutPacketPool, (int)tcpInPacket.PacketCmdID, tcpInPacket.GetPacketBytes(), tcpInPacket.PacketDataSize, out tcpOutPacket); if (result == TCPProcessCmdResults.RESULT_DATA && null != tcpOutPacket) { this.socketListener.SendData(tcpInPacket.CurrentSocket, tcpOutPacket); } else if (result == TCPProcessCmdResults.RESULT_FAILED) { LogManager.WriteLog(LogTypes.Error, string.Format("解析并执行命令失败: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket))); return(false); } result2 = true; } return(result2); }
public void SendPlayGame(string _RoleID) { PlayGame szPlayGame = new PlayGame(); szPlayGame.RoleID = Convert.ToInt32(_RoleID); MemoryStream msResult = new MemoryStream(); Serializer.Serialize <PlayGame>(msResult, szPlayGame); byte[] msSendData = msResult.ToArray(); TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_GSNetClient.OutPacketPool, msSendData, 0, msSendData.Length, (int)CommandID.CMD_PLAY_GAME); if (m_GSNetClient.SendData(szTCPOutPacket)) { SysConOut.WriteLine("发送进入游戏成功"); } else { SysConOut.WriteLine("发送进入游戏失败"); } //TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_tcpOutPacketPool, StringUtil.substitute("{0}", _RoleID), // (int)TCPServerCmds.CMD_PLAY_GAME); //if (m_GSNetClient.SendData(szTCPOutPacket)) // SysConOut.WriteLine("发送进入游戏成功"); //else // SysConOut.WriteLine("发送进入游戏失败"); m_GSNetClient.OutPacketPool.Push(szTCPOutPacket); }
//public static bool SendNetObject<T>(this T obj, CommandID cmd) //where T : global::ProtoBuf.IExtensible //{ // int cmdID = (int)cmd; // try // { // using (MemoryStream ms = new MemoryStream()) // { // Serializer.Serialize<T>(ms, obj); // byte[] datas = ms.ToArray();//序列化结果 // TCPOutPacket packet = TCPOutPacket.MakeTCPOutPacket( // Sender.tcpOutPacketPool, // datas, 0, datas.Length, // cmdID // ); // return Sender.SendData(packet); // } // } // catch (Exception e) // { // Debug.LogError(e.Message); // return false; // } //} public void SendInitGame(string _Acc, string _RoleID) { InitialGame szInitialGame = new InitialGame(); szInitialGame.Acc = _Acc; szInitialGame.RoleID = Convert.ToInt32(_RoleID); MemoryStream msResult = new MemoryStream(); Serializer.Serialize <InitialGame>(msResult, szInitialGame); byte[] msSendData = msResult.ToArray(); TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_GSNetClient.OutPacketPool, msSendData, 0, msSendData.Length, (int)CommandID.CMD_INIT_GAME); if (m_GSNetClient.SendData(szTCPOutPacket)) { SysConOut.WriteLine("发送初始化游戏成功"); } else { SysConOut.WriteLine("发送初始化游戏失败"); } //TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_tcpOutPacketPool, // StringUtil.substitute("{0}:{1}:{2}", _Acc, _RoleID, "0"), (int)TCPServerCmds.CMD_INIT_GAME); //if (m_GSNetClient.SendData(szTCPOutPacket)) // SysConOut.WriteLine("发送初始化游戏成功"); //else //{ // SysConOut.WriteLine("发送初始化游戏失败 连接状态 = " + m_GSNetClient.Connected.ToString()); //} m_GSNetClient.OutPacketPool.Push(szTCPOutPacket); }
public TCPProcessCmdResults transmission(TMSKSocket socket, int nID, byte[] data, int count) { try { string 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 { byte[] bytesData = Global.SendAndRecvData <byte[]>(nID, data, socket.ServerId, 0); if (null == bytesData) { LogManager.WriteLog(LogTypes.Error, string.Format("与DBServer通讯失败, CMD={0}", (TCPGameServerCmds)nID), null, true); return(TCPProcessCmdResults.RESULT_FAILED); } int length = BitConverter.ToInt32(bytesData, 0); ushort cmd = BitConverter.ToUInt16(bytesData, 4); TCPOutPacket tcpOutPacket = TCPOutPacketPool.getInstance().Pop(); tcpOutPacket.PacketCmdID = cmd; tcpOutPacket.FinalWriteData(bytesData, 6, length - 2); TCPManager.getInstance().MySocketListener.SendData(socket, tcpOutPacket, true); return(TCPProcessCmdResults.RESULT_OK); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(socket), false, false); } return(TCPProcessCmdResults.RESULT_FAILED); }
public void SendRoleData(string _Acc) { GetRolesList szGetRolesList = new GetRolesList(); szGetRolesList.Acc = _Acc; szGetRolesList.ZoneID = 0; MemoryStream msResult = new MemoryStream(); Serializer.Serialize <GetRolesList>(msResult, szGetRolesList); byte[] msSendData = msResult.ToArray(); TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_GSNetClient.OutPacketPool, msSendData, 0, msSendData.Length, (int)CommandID.CMD_GET_ROLE_LIST); if (m_GSNetClient.SendData(szTCPOutPacket)) { SysConOut.WriteLine("发送获取角色列表数据成功"); } else { SysConOut.WriteLine("发送获取角色列表数据失败"); } //TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_tcpOutPacketPool, // StringUtil.substitute("{0}:{1}", _Acc, "0"), // (int)TCPServerCmds.CMD_ROLE_LIST); //if (m_GSNetClient.SendData(szTCPOutPacket)) // SysConOut.WriteLine("发送获取角色列表数据成功"); //else // SysConOut.WriteLine("发送获取角色列表数据失败"); m_GSNetClient.OutPacketPool.Push(szTCPOutPacket); }
public static TCPProcessCmdResults ProcTalentEffectClear(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket) { tcpOutPacket = null; string[] fields = null; try { int length = 2; if (!CheckHelper.CheckTCPCmdFields(nID, data, count, out fields, length)) { tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, 1.ToString(), nID); return(TCPProcessCmdResults.RESULT_DATA); } int roleID = Convert.ToInt32(fields[0]); int zoneID = Convert.ToInt32(fields[1]); string strcmd = TalentManager.TalentEffectClear(dbMgr, roleID, zoneID); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, "", false, false); } tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, 1.ToString(), nID); return(TCPProcessCmdResults.RESULT_DATA); }
/// 发送数据 public byte[] SendData(TCPOutPacket tcpOutPacket) { lock (MutexSocket) { if (null == _Socket) { return(null); //还没连接 } try { //字节排序 DataHelper.SortBytes(tcpOutPacket.GetPacketBytes(), 0, tcpOutPacket.PacketDataSize); //将数据发送给对方 _Socket.Send(tcpOutPacket.GetPacketBytes(), tcpOutPacket.PacketDataSize, SocketFlags.None); } catch (Exception) { //断开连接 Disconnect(); LogManager.WriteLog(LogTypes.Error, string.Format("{0}, 与GameServer: {1}通讯失败", ListIndex, Global.GetSocketRemoteEndPoint(_Socket))); } return(null); } }
/// <summary> /// 向客户端发送数据 /// </summary> /// <param name="data"></param> internal bool SendData(Socket s, TCPOutPacket tcpOutPacket) { SocketAsyncEventArgs writeEventArgs = this.writePool.Pop(); //线程安全的操作 if (null == writeEventArgs) { writeEventArgs = new SocketAsyncEventArgs(); writeEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(OnIOCompleted); writeEventArgs.UserToken = new AsyncUserToken() { CurrentSocket = null, Tag = null }; } //字节排序 //DataHelper.SortBytes(tcpOutPacket.GetPacketBytes(), 0, tcpOutPacket.PacketDataSize); writeEventArgs.SetBuffer(tcpOutPacket.GetPacketBytes(), 0, tcpOutPacket.PacketDataSize); (writeEventArgs.UserToken as AsyncUserToken).CurrentSocket = s; (writeEventArgs.UserToken as AsyncUserToken).Tag = (object)tcpOutPacket; bool exception = false; Boolean willRaiseEvent = _SendAsync(writeEventArgs, out exception); if (!willRaiseEvent) { this.ProcessSend(writeEventArgs); } return(!exception); }
/// <summary> // 通知客户端 /// </summary> public static void SendMsgToClientForExperienceCopyMapInfo(GameClient client, int nWave) { ExperienceCopyScene tmpExSceneInfo = null; // 此处需要加锁 lock (m_ExperienceListCopyMapsInfo) { m_ExperienceListCopyMapsInfo.TryGetValue(client.ClientData.FuBenSeqID, out tmpExSceneInfo); } if (tmpExSceneInfo == null) { return; } int nRealyWave = nWave; int nTotalWave = Data.ExperienceCopyMapDataInfoList[client.ClientData.MapCode].MonsterIDList.Count; if (nRealyWave > nTotalWave) { nRealyWave = nTotalWave; } string strcmd = string.Format("{0}:{1}:{2}", nRealyWave, nTotalWave, tmpExSceneInfo.m_ExperienceCopyMapRemainMonsterNum); TCPOutPacket tcpOutPacket = null; tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(Global._TCPManager.TcpOutPacketPool, strcmd, (int)TCPGameServerCmds.CMD_SPR_EXPERIENCECOPYMAPINFO); Global._TCPManager.MySocketListener.SendData(client.ClientSocket, tcpOutPacket); }
public static TCPOutPacket ProcessGetWaBaoGoodsData(GameClient client, TCPOutPacketPool pool, int cmd) { TCPOutPacket result; if (null == client.ClientData.WaBaoGoodsData) { string strcmd = string.Format("{0}:{1}", -1, client.ClientData.RoleID); result = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, cmd); } else if (!Global.CanAddGoods(client, client.ClientData.WaBaoGoodsData.GoodsID, client.ClientData.WaBaoGoodsData.GCount, client.ClientData.WaBaoGoodsData.Binding, client.ClientData.WaBaoGoodsData.Endtime, true, false)) { string strcmd = string.Format("{0}:{1}", -10, client.ClientData.RoleID); result = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, cmd); } else { int dbRet = Global.AddGoodsDBCommand(pool, client, client.ClientData.WaBaoGoodsData.GoodsID, client.ClientData.WaBaoGoodsData.GCount, client.ClientData.WaBaoGoodsData.Quality, client.ClientData.WaBaoGoodsData.Props, client.ClientData.WaBaoGoodsData.Forge_level, client.ClientData.WaBaoGoodsData.Binding, client.ClientData.WaBaoGoodsData.Site, client.ClientData.WaBaoGoodsData.Jewellist, true, 1, "挖宝获取道具", "1900-01-01 12:00:00", client.ClientData.WaBaoGoodsData.AddPropIndex, client.ClientData.WaBaoGoodsData.BornIndex, client.ClientData.WaBaoGoodsData.Lucky, client.ClientData.WaBaoGoodsData.Strong, 0, 0, 0, null, null, 0, true); if (dbRet < 0) { string strcmd = string.Format("{0}:{1}", -10, client.ClientData.RoleID); result = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, cmd); } else { client.ClientData.WaBaoGoodsData = null; string strcmd = string.Format("{0}:{1}", 0, client.ClientData.RoleID); result = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, cmd); } } return(result); }
/// <summary> /// 在多个线程内部循环调用 /// </summary> public void ProcessCmdPackets(Queue <CmdPacket> ls) { //dictInPackets.Values值的个数可能会变化,每次处理先保存好最大个数 //同时给出20个冗余数量 int maxCount = dictInPackets.Values.Count + 20; for (int n = 0; n < maxCount; n++) { TCPInPacket tcpInPacket = GetNextTcpInPacket(n); //这意味着列表数据包变少了 if (null == tcpInPacket) { break; } ls.Clear(); if (tcpInPacket.PopCmdPackets(ls)) //判断是否取到了指令列表 { try { while (ls.Count > 0) { CmdPacket cmdPacket = ls.Dequeue(); //接收到了完整的命令包 TCPOutPacket tcpOutPacket = null; TCPProcessCmdResults result = TCPProcessCmdResults.RESULT_FAILED; result = TCPCmdHandler.ProcessCmd(this, tcpInPacket.CurrentSocket, tcpClientPool, tcpRandKey, tcpOutPacketPool, cmdPacket.CmdID, cmdPacket.Data, cmdPacket.Data.Length, out tcpOutPacket); if (result == TCPProcessCmdResults.RESULT_DATA && null != tcpOutPacket) { //向登陆客户端返回数据 socketListener.SendData(tcpInPacket.CurrentSocket, tcpOutPacket); } else if (result == TCPProcessCmdResults.RESULT_FAILED)//解析失败, 直接关闭连接 { if (cmdPacket.CmdID != (int)TCPGameServerCmds.CMD_LOG_OUT) { LogManager.WriteLog(LogTypes.Error, string.Format("解析并执行命令失败: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket))); } SysConOut.WriteLine("========================ProcessCmdPackets CloseSocket================"); // Console.WriteLine("========================ProcessCmdPackets CloseSocket================"); //这儿需要关闭链接--->这样关闭对吗? socketListener.CloseSocket(tcpInPacket.CurrentSocket); break; } } } finally { //处理结束之后设置相关标志位 tcpInPacket.OnThreadDealingComplete(); } } } }
public TCPProcessCmdResults ProcessMarryPartyQuery(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, 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) { LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket))); return(TCPProcessCmdResults.RESULT_FAILED); } if (client.ClientSocket.IsKuaFuLogin) { client.sendCmd((int)TCPGameServerCmds.CMD_SPR_MARRY_PARTY_QUERY, new Dictionary <int, MarryPartyData>()); } else { //return Global.RequestToDBServer2(tcpClientPool, pool, (int)TCPGameServerCmds.CMD_DB_MARRY_PARTY_QUERY, string.Format("{0}", GameManager.ServerLineID), out tcpOutPacket); SendMarryPartyList(client, null, roleID); } return(TCPProcessCmdResults.RESULT_OK); } catch (Exception ex) { // 格式化异常错误信息 DataHelper.WriteFormatExceptionLog(ex, "", false); } tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN); return(TCPProcessCmdResults.RESULT_DATA); }
public void SendCmdAfterStartPlayGame(int cmdId, byte[] cmdData) { lock (this.DelayStartPlayGameMsgQueue) { TCPOutPacket tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(TCPOutPacketPool.getInstance(), cmdData, cmdId); this.DelayStartPlayGameMsgQueue.Enqueue(tcpOutPacket); } }
public void SendCmdAfterStartPlayGame <T>(int cmdId, T cmdData) { lock (this.DelayStartPlayGameMsgQueue) { TCPOutPacket tcpOutPacket = DataHelper.ObjectToTCPOutPacket <T>(cmdData, TCPOutPacketPool.getInstance(), cmdId); this.DelayStartPlayGameMsgQueue.Enqueue(tcpOutPacket); } }
/// <summary> /// 发送数据通知函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SocketSended(object sender, SocketAsyncEventArgs e) { //SocketListener sl = sender as SocketListener; //Socket s = (e.UserToken as AsyncUserToken).CurrentSocket; TCPOutPacket tcpOutPacket = (e.UserToken as AsyncUserToken).Tag as TCPOutPacket; tcpOutPacketPool.Push(tcpOutPacket); }
public static TCPProcessCmdResults ProcessFazhenBossCMD(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, 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 (fields.Length != 1) { 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); } if (client.ClientData.FuBenID != LuoLanFaZhenCopySceneManager.LuoLanFaZhenFubenID) { return(TCPProcessCmdResults.RESULT_OK); } SingleLuoLanFaZhenFubenData fubenData = LuoLanFaZhenCopySceneManager.GetFubenData(client.ClientData.FuBenSeqID); if (null == fubenData) { return(TCPProcessCmdResults.RESULT_OK); } string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { LuoLanFaZhenCopySceneManager.LuoLanFaZhenFubenID, LuoLanFaZhenCopySceneManager.FinalBossID, fubenData.FinalBossLeftNum, LuoLanFaZhenCopySceneManager.SpecialBossID, fubenData.SpecailBossLeftNum }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, 760); return(TCPProcessCmdResults.RESULT_DATA); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, "ProcessFazhenBossCMD", 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); }
/// <summary> /// 申请举办 /// </summary> public TCPProcessCmdResults ProcessHoldQingGongYanCMD(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, 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 { string[] fields = cmdData.Split(':'); if (fields.Length != 3) { 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 Index = Convert.ToInt32(fields[1]); int OnlyCheck = Convert.ToInt32(fields[2]); 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); } QingGongYanResult result = HoldQingGongYan(client, Index, OnlyCheck); string strcmd = ""; if (result != QingGongYanResult.Success) { strcmd = string.Format("{0}:{1}:{2}", (int)result, roleID, OnlyCheck); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } strcmd = string.Format("{0}:{1}:{2}", (int)QingGongYanResult.Success, roleID, OnlyCheck); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, "ProcessHoldQingGongYanCMD", false); } return(TCPProcessCmdResults.RESULT_FAILED); }
/// <summary> /// 重置世界等级 /// </summary> public void ResetWorldLevel() { int dayID = TimeUtil.NowDateTime().DayOfYear; if (m_nResetWorldLevelDayID == dayID) { return; } TCPOutPacket tcpOutPacket = null; string strcmd = string.Format("{0}:{1}", 0, (int)PaiHangTypes.RoleLevel); TCPProcessCmdResults dbRequestResult = Global.RequestToDBServer2(Global._TCPManager.tcpClientPool, TCPOutPacketPool.getInstance(), (int)TCPGameServerCmds.CMD_SPR_GETPAIHANGLIST, strcmd, out tcpOutPacket, GameManager.LocalServerId); if (dbRequestResult == TCPProcessCmdResults.RESULT_FAILED) { LogManager.WriteLog(LogTypes.Error, "世界等级装入异常"); return; } int nBakResetWorldLevelDayID = m_nResetWorldLevelDayID; m_nResetWorldLevelDayID = dayID; // 处理本地精简的好友列表数据 PaiHangData paiHangData = DataHelper.BytesToObject <PaiHangData>(tcpOutPacket.GetPacketBytes(), 6, tcpOutPacket.PacketDataSize - 6); if (null != paiHangData) { int nLevelCount = 0; if (null != paiHangData.PaiHangList) { for (int i = 0; i < 10 && i < paiHangData.PaiHangList.Count; i++) { nLevelCount += paiHangData.PaiHangList[i].Val2 * 100 + paiHangData.PaiHangList[i].Val1; } } m_nWorldLevel = nLevelCount / 10; } else { LogManager.WriteLog(LogTypes.Error, "世界等级装入时,获取等级排行榜失败"); return; } if (0 != nBakResetWorldLevelDayID) { int count = GameManager.ClientMgr.GetMaxClientCount(); for (int i = 0; i < count; i++) { GameClient client = GameManager.ClientMgr.FindClientByNid(i); if (null != client) { UpddateWorldLevelBuff(client); } } } }
/// <summary> /// 新区充值返利领取 /// </summary> /// <param name="dbMgr"></param> /// <param name="pool"></param> /// <param name="nID"></param> /// <param name="data"></param> /// <param name="count"></param> /// <param name="tcpOutPacket"></param> /// <returns></returns> private static TCPProcessCmdResults GetNewFanliAward(DBManager dbMgr, TCPOutPacketPool pool, int nID, int roleID, int activeid, string fromDate, string todate, List <int> minGateValueList, out TCPOutPacket tcpOutPacket) { tcpOutPacket = null; string cmdData = null; string strcmd = ""; try { DBRoleInfo roleInfo = dbMgr.GetDBRoleInfo(roleID); if (null == roleInfo) { strcmd = string.Format("{0}:{1}:{2}", -1001, roleID, activeid); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } int roleYuanBaoInPeriod = NewZoneActiveMgr.ComputTotalFanliValue(dbMgr, roleInfo, activeid, fromDate, todate, minGateValueList); DBUserInfo userInfo = dbMgr.GetDBUserInfo(roleInfo.UserID); //避免同一用户账号同时多次操作 lock (userInfo) { if (roleYuanBaoInPeriod > 0) { //活动时间取前一天的 DateTime sub1DayDateTime = Global.GetAddDaysDataTime(DateTime.Now, -1, true); DateTime startTime = new DateTime(sub1DayDateTime.Year, sub1DayDateTime.Month, sub1DayDateTime.Day, 0, 0, 0); DateTime endTime = new DateTime(sub1DayDateTime.Year, sub1DayDateTime.Month, sub1DayDateTime.Day, 23, 59, 59); string huoDongKeyStr = Global.GetHuoDongKeyString(startTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime.ToString("yyyy-MM-dd HH:mm:ss")); //更新已领取状态 int ret = DBWriter.AddHongDongAwardRecordForUser(dbMgr, roleInfo.UserID, (int)(ActivityTypes.NewZoneFanli), huoDongKeyStr, 1, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); if (ret < 0) { strcmd = string.Format("{0}:{1}:{2}", -1008, roleID, activeid); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } } } strcmd = string.Format("{0}:{1}:{2}", 1, roleYuanBaoInPeriod, activeid); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, 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); }
/// <summary> /// 获取视频聊天室相关数据 /// </summary> /// <param name="socket"></param> /// <param name="pool"></param> /// <param name="nID"></param> /// <param name="tcpOutPacket"></param> /// <returns></returns> public static TCPProcessCmdResults ProcessOpenVideoCmd(TMSKSocket socket, 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_SPR_VIDEO_OPEN); 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_SPR_VIDEO_OPEN); 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); } VideoData roomData = GetVideoRoomData(client); if (roomData == null) { tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "", nID); return(TCPProcessCmdResults.RESULT_DATA); } var filterStatus = GetPlayerFilterStatus(client, roomData); string strcmd = string.Format("{0}:{1}:{2}", roomData.TalkID, roomData.PassWord, filterStatus); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(socket), false); } return(TCPProcessCmdResults.RESULT_DATA); }