public SendThread(INetworkChannelHandler handler, NetworkStream networkStream, MessageHandler messageHandler) { mMessageHandler = messageHandler; mHandler = handler; mNetworkStream = networkStream; mStream = new SerializerStream(DefaultBufferLength); }
private void Dispose(bool disposing) { if (m_Disposed) { return; } if (disposing) { if (Stream != null) { Stream.Dispose(); Stream = null; } } m_Disposed = true; }
public ReceiveData() { Stream = new SerializerStream(DefaultBufferLength); ProcessPacketHeader = true; Stream.SafeSetLength(TcpNetworkChannel.PacketHeadLength); }
void ReceiveCallback(IAsyncResult ar) { if (mManualResetEvent != null) { Debug.Log("ReceiveCallback mManualResetEvent != null"); mManualResetEvent.Set(); Receiving = false; return; } try { SerializerStream Stream = mReceiveData.Stream; int bytesReceived = TcpClient.GetStream().EndRead(ar); if (bytesReceived <= 0) { //if (mChannel.Status != NetworkStatus.Disconnecting) // mChannel.Disconnect(); Debug.Log("ReceiveCallback bytesReceived <= 0"); Receiving = false; Close(true); return; } Stream.SetPosition(Stream.Position + bytesReceived); if (Stream.Position < Stream.Length) { Receive(); return; } Stream.SetPosition(0); if (mReceiveData.ProcessPacketHeader) { int receiveSize = TcpNetworkChannel.ReadPacketHead(Stream); Stream.SetPosition(0); if (receiveSize > 0) { Stream.SafeSetLength(receiveSize); mReceiveData.ProcessPacketHeader = false; } else { OnNetworkError("ReceiveCallback packet head error,length = " + receiveSize); } } else { System.Object packet = mHandler.DeserializePacket(Stream); lock (mMessageQueue) { mMessageQueue.Enqueue(mObjectPool.Acquire().PacketMessage(packet)); } Stream.SetPosition(0); Stream.SafeSetLength(TcpNetworkChannel.PacketHeadLength); mReceiveData.ProcessPacketHeader = true; } Receive(); } catch (Exception exception) { SocketException socketException = exception as SocketException; if (socketException != null) { OnNetworkError(string.Format("SendThread socket error code = {0} see detail from https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2" , socketException.ErrorCode)); } else { OnNetworkError(exception.ToString()); } Receiving = false; Close(true); } }