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 GameServerClient getClient(Socket socket) { GameServerClient client = null; this.gameServerClients.TryGetValue(socket, out client); return(client); }
private void SocketClosed(object sender, SocketAsyncEventArgs e) { SocketListener sl = sender as SocketListener; Socket s = (e.UserToken as AsyncUserToken).CurrentSocket; lock (this.dictInPackets) { if (this.dictInPackets.ContainsKey(s)) { TCPInPacket tcpInPacket = this.dictInPackets[s]; this.tcpInPacketPool.Push(tcpInPacket); this.dictInPackets.Remove(s); } } lock (this.gameServerClients) { GameServerClient client = null; if (this.gameServerClients.TryGetValue(s, out client)) { client.release(); this.gameServerClients.Remove(s); } } this.RootWindow.TotalConnections = sl.ConnectedSocketsCount; }
public static TCPProcessCmdResults ProcessCmd(GameServerClient client, DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket) { tcpOutPacket = null; TCPProcessCmdResults result; if (nID != 11001) { result = TCPCmdDispatcher.getInstance().dispathProcessor(client, nID, data, count); } else { result = TCPCmdHandler.ProcessOnlineServerHeartCmd(dbMgr, pool, nID, data, count, out tcpOutPacket); } return(result); }
private void SocketConnected(object sender, SocketAsyncEventArgs e) { SocketListener sl = sender as SocketListener; this.RootWindow.TotalConnections = sl.ConnectedSocketsCount; lock (this.gameServerClients) { GameServerClient client = null; Socket s = (e.UserToken as AsyncUserToken).CurrentSocket; if (!this.gameServerClients.TryGetValue(s, out client)) { client = new GameServerClient(s); this.gameServerClients.Add(s, client); } } }
public TCPProcessCmdResults dispathProcessor(GameServerClient client, int nID, byte[] data, int count) { try { ICmdProcessor cmdProcessor = null; if (!this.cmdProcesserMapping.TryGetValue(nID, out cmdProcessor)) { LogManager.WriteLog(LogTypes.Error, string.Format("未注册指令, CMD={0}, Client={1}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(client.CurrentSocket))); client.sendCmd(32767, "0"); return(TCPProcessCmdResults.RESULT_DATA); } cmdProcessor.processCmd(client, data, count); return(TCPProcessCmdResults.RESULT_OK); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.CurrentSocket), false, false); } client.sendCmd(32767, "0"); return(TCPProcessCmdResults.RESULT_DATA); }