public void ProcessCommands(ConnectManager connMan) { // 一次最多执行10个 for (int i = 0; i < 10; i++) { if (!m_InputStream.HasData()) { return; } int size = m_InputStream.TryReadBuffer(m_temp); //parse packet id and length if (size < 4) { return; } ushort len = BitConverter.ToUInt16(m_temp, 0); ushort packetId = BitConverter.ToUInt16(m_temp, 2); if (size < len) { //还没接收完或者包不完整 return; } m_InputStream.SetReadIndex(len); try { // 调用handle IPacketFactory factory = connMan.GetPacketFactory((Packets.PacketIdDefine)packetId); if (factory != null) { m_tempStream.Seek(0, SeekOrigin.Begin); m_tempStream.SetLength(len - c_headSize); object data = Serializer.Deserialize(factory.GetDataType(), m_tempStream);//GC狂魔 IPacketHandler handler = connMan.GetPacketHandler((Packets.PacketIdDefine)packetId); if (handler != null) { handler.Handle(this, data); } } } catch (Exception e) { LogModule.LogInfo("Handle packet error, Packet id : {0}, len : {1}, msg : {2}", packetId, len, e.Message); Shutdown(); break; } } }