Example #1
0
    /// <summary>
    /// 接收消息
    /// </summary>
    /// <param name="clientSocket"></param>
    private static void ReceiveMessage(object _data)
    {
        DP_Msg data = (DP_Msg)_data;

        while (!data.m_bError)
        {
            Thread.Sleep(10);

            //lock (data.m_Lock)
            {
                Queue <WfPacket> local_RecvQueue        = data.m_RecvQueue;
                Queue <WfPacket> local_SendQueue        = data.m_SendQueue;
                object           local_Lock             = data.m_Lock;
                PacketHandlerMgr local_PacketHandlerMgr = data.m_PacketHandlerMgr;
                Socket           myClientSocket         = data.clientSocket;
                string           text   = null;
                bool             flag   = false;
                byte[]           array  = new byte[WfPacket.GetHeaderLength()];
                byte[]           array2 = null;
                int num = 0;
                do
                {
                    text = ServerNet.RecvAll(data, ref array, ref array2, ref num, ref flag);
                    if (num != 0)
                    {
                        data.m_LastConnTime = Environment.TickCount;
                    }
                }while (text == null && !flag);
            }
        }
        Log.print("线程{0}ReceiveMessage结束。", data.clientSocket.RemoteEndPoint.ToString());
    }
Example #2
0
    private static void SendMessage(object _data)
    {
        DP_Msg data = (DP_Msg)_data;

        while (!data.m_bError)
        {
            Thread.Sleep(10);

            // lock (data.m_Lock)
            {
                Queue <WfPacket> local_RecvQueue        = data.m_RecvQueue;
                Queue <WfPacket> local_SendQueue        = data.m_SendQueue;
                object           local_Lock             = data.m_Lock;
                PacketHandlerMgr local_PacketHandlerMgr = data.m_PacketHandlerMgr;
                Socket           myClientSocket         = data.clientSocket;

                WfPacket msgPacket = null;
                string   text      = null;
                //处理发送消息

                while (local_SendQueue.Count > 0 || msgPacket != null)
                {
                    int num2 = 0;
                    if (msgPacket != null)
                    {
                        text = SendAll(data, msgPacket, ref num2);
                        if (num2 == msgPacket.GetOffset())
                        {
                            msgPacket = null;
                        }
                    }
                    if (text != null || msgPacket != null || local_SendQueue.Count <= 0)
                    {
                        break;
                    }
                    num2      = 0;
                    msgPacket = local_SendQueue.Dequeue();
                    msgPacket.SetHeadLength();
                }
            }
        }
        Log.print("线程{0}SendMessage结束。", data.clientSocket.RemoteEndPoint.ToString());
    }
Example #3
0
    private static void ProecssMessage(object _data)
    {
        DP_Msg data = (DP_Msg)_data;

        Log.print("ProecssMessage>>>>>>Start");
        while (!data.m_bError)
        {
            Thread.Sleep(10);
            //lock (data.m_Lock)
            {
                Queue <WfPacket> local_RecvQueue        = data.m_RecvQueue;
                Queue <WfPacket> local_SendQueue        = data.m_SendQueue;
                object           local_Lock             = data.m_Lock;
                PacketHandlerMgr local_PacketHandlerMgr = data.m_PacketHandlerMgr;
                Socket           myClientSocket         = data.clientSocket;
                //Log.print("ProecssMessage>>>>>>" + local_RecvQueue.Count.ToString());
                try
                {
                    //通过clientSocket接收数据
                    //lock (local_Lock)
                    {
                        while (local_RecvQueue.Count > 0)
                        {
                            WfPacket packet = local_RecvQueue.Dequeue();
                            local_PacketHandlerMgr.ProcessPacket(data, packet);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Log.print(ex.Message);
                    myClientSocket.Shutdown(SocketShutdown.Both);
                    myClientSocket.Close();
                    break;
                }
            }
        }
        Log.print("线程{0}ProecssMessage结束。", data.clientSocket.RemoteEndPoint.ToString());
    }