/// <summary> /// /// </summary> /// <param name="newNetState"></param> internal static void Zone_InitializeNetState(object sender, NetStateInitEventArgs netStateInit) { if (netStateInit.NetStateInit != null && netStateInit.NetStateInit.ExtendData == null) { // 初始化客户端 ZoneExtendData l_ExtendData = new ZoneExtendData(); l_ExtendData.NetState = netStateInit.NetStateInit; bool l_bCheck = l_ExtendData.ConnectToZoneClusterServer(ProcessServer.ConfigInfo.ZoneClusterHost, ProcessServer.ConfigInfo.ZoneClusterPort); if (l_bCheck) { netStateInit.NetStateInit.ExtendData = l_ExtendData; } else { Debug.WriteLine("ProcessNet.NetState_InitializeNetState(...) - l_bCheck == false error!"); } } else { Debug.WriteLine("ProcessNet.NetState_InitializeNetState(...) - newNetState != null && newNetState.ExtendData == null error!"); } }
/// <summary> /// /// </summary> /// <param name="netState"></param> internal static void Zone_ProcessReceive(object sender, NetStateEventArgs eventArgs) { LOGs.WriteLine(LogMessageType.MSG_HACK, "ProcessNet.MessagePump_ProcessReceive(...) {0}", Thread.CurrentThread.Name); if (eventArgs.NetState == null) { Debug.WriteLine("ProcessNet.EventDelegateProcessReceive(...) - netState == null error!"); return; } ZoneExtendData l_ExtendData = null; if (eventArgs.NetState.ExtendData == null) { Debug.WriteLine("ProcessNet.MessagePump_ProcessReceive(...) - eventArgs.NetState.ExtendData == null error!"); eventArgs.NetState.Dispose(false); return; } else { l_ExtendData = eventArgs.NetState.ExtendData as ZoneExtendData; if (l_ExtendData == null) { Debug.WriteLine("ProcessNet.MessagePump_ProcessReceive(...) - l_ExtendData == null error!"); eventArgs.NetState.Dispose(false); return; } } ReceiveQueue l_ReceiveQueueBuffer = eventArgs.NetState.ReceiveBuffer; if (l_ReceiveQueueBuffer == null) { Debug.WriteLine("ProcessNet.MessagePump_ProcessReceive(...) - byteQueueBuffer == null error!"); return; } LOGs.WriteLine(LogMessageType.MSG_HACK, "ProcessNet.MessagePump_ProcessReceive(...) Length = {0},{1}", l_ReceiveQueueBuffer.Length, Thread.CurrentThread.Name); long l_iReceiveBufferLength = l_ReceiveQueueBuffer.Length; // 隔段时间就会有数据过来,所以可以不用锁定的,锁定了也没用,很难保证多线程中处理了所有的数据 while (l_iReceiveBufferLength > 0) { // 获取空数据 byte[] l_PacketBuffer = s_ProcessorBuffers.AcquireBuffer(); // ReceiveQueue内部已经有锁定 long l_iReturnPacketSize = l_ReceiveQueueBuffer.Dequeue(ref l_PacketBuffer, 0, l_iReceiveBufferLength); // 获取的数据不相同 if (l_iReturnPacketSize != l_iReceiveBufferLength) { Debug.WriteLine("ProcessNet.MessagePump_ProcessReceive(...) - iReturnPacketSize != iPacketSize error!"); // 返回内存池 s_ProcessorBuffers.ReleaseBuffer(l_PacketBuffer); eventArgs.NetState.Dispose(false); // 断开 return; } // 发送数据 l_ExtendData.SendToZoneClusterServer(l_PacketBuffer, l_iReturnPacketSize); // 返回内存池 s_ProcessorBuffers.ReleaseBuffer(l_PacketBuffer); // 获取剩下的数据长度 l_iReceiveBufferLength = l_ReceiveQueueBuffer.Length; } }