Example #1
0
        protected override bool MainLoop()
        {
            while (mSendPacketPool.Count > 0)
            {
                System.Object packet = null;
                lock (mSendPacketPool)
                {
                    packet = mSendPacketPool.Dequeue();
                }

                mStream.SetPosition(TcpNetworkChannel.PacketHeadLength);
                if (!mHandler.SerializePacket(packet, mStream))
                {
                    mHandler.OnNetworkError("Serialized packet failure.");
                    return(false);
                }
                int packetLength = (int)mStream.Position - TcpNetworkChannel.PacketHeadLength;
                mStream.SetPosition(0);
                TcpNetworkChannel.WritePacketHead(packetLength, mStream);
                try
                {
                    mNetworkStream.Write(mStream.GetBuffer(), 0, packetLength + TcpNetworkChannel.PacketHeadLength);
                }
                catch (Exception exception)
                {
                    SocketException socketException = exception as SocketException;
                    if (socketException != null)
                    {
                        mMessageHandler(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));
                        return(false);
                    }
                    throw;
                }
            }
            Pause();
            return(true);
        }