/// <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()); }
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()); }
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()); }