Example #1
0
        /// <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!");
            }
        }
Example #2
0
        /// <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;
            }
        }