Beispiel #1
0
        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);
        }
Beispiel #2
0
        public GameServerClient getClient(Socket socket)
        {
            GameServerClient client = null;

            this.gameServerClients.TryGetValue(socket, out client);
            return(client);
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
                }
            }
        }
Beispiel #6
0
 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);
 }