private void OnSocketSend()
    {
        NetPacket packet;

        while (true)
        {
            AutoResetEvent sendEvent = sendPool.sendEvent;
            if (sendEvent.WaitOne(2000))
            {
                if (IsSocketValid() == false)
                {
                    continue;
                }
                try
                {
                    while (sendPool.HasPacketToSend())
                    {
                        packet            = sendPool.GetSendPacket();
                        packet.remainTime = cSendTimeout;
                        lock (timeoutPacket)
                        {
                            if (!timeoutPacket.ContainsKey(packet.msgid))
                            {
                                timeoutPacket.Add(packet.msgid, packet);
                            }
                            else
                            {
                                timeoutPacket[packet.msgid] = packet;
                            }
                        }

                        sendBuffer.Clear();
                        packet.WriteBuffer(packetSeq++, sendBuffer);
                        var i = m_socket.Send(sendBuffer.BBuffer, sendBuffer.Count, SocketFlags.None);

                        if (LaunchConfigManager.LogEnable("NetManager"))
                        {
                            //LogUtils.LogWarning("Net send", packetSeq - 1, packet.msgid, packet.data.Length, i);
                        }
                    }
                }
                catch (ThreadAbortException e)
                {
                    //忽略Thread.Abort异常
                }
                catch (Exception e)
                {
                    LogUtils.LogError("Net send error:", e);
                    Close(true);
                    continue;
                }
            }
        }
    }
    public override void DoUpdate()
    {
        if (!IsSocketValid())
        {
            return;
        }
        removeKey = null;
        clearBool = false;
        PluginUtilities.ProfilerBegin("NetManager.DoUpdate");
        foreach (var e in timeoutPacket.Keys)
        {
            timeoutPacket[e].remainTime -= Time.unscaledDeltaTime;
            if (timeoutPacket[e].remainTime <= 0)
            {
                if (OnProcessTimeout(e, timeoutPacket[e]))
                {
                    clearBool = true;
                    break;
                }
                else
                {
                    removeKey = e;
                    break;
                }
            }
        }

        if (clearBool)
        {
            timeoutPacket.Clear();
        }
        else if (removeKey != null)
        {
            timeoutPacket.Remove(removeKey.Value);
        }

        NetPacket packet = null;

        while ((packet = recvPool.GetRecvPacket()) != null)
        {
            if (LaunchConfigManager.LogEnable("NetManager"))
            {
                //LogUtils.LogWarning("Net recv, cmd =", packet.msgid, "len = ", packet.data.Length);
            }

            DispatchCmdEvent(packet);
        }

        PluginUtilities.ProfilerEnd();
    }
    private void OnSocketReceive()
    {
        while (true)
        {
            int count = 0;
            tempBuffer.Clear();

            connectEvent.WaitOne();

            try
            {
                //发热修改:socket.Available <= 0 || (count = socket.Receive(tempBuffer.BBuffer)) < 0 会导致receive不会block的情况
                if ((count = m_socket.Receive(tempBuffer.BBuffer)) < 0)
                {
                    //Disconnect();
                    continue;
                }

                tempBuffer.Count = count;
                buffer.Append(tempBuffer);

                while (buffer.CanReadInt32())
                {
                    var len = buffer.ReadInt32();

                    if (buffer.Available >= len)
                    {
                        var packet = new NetPacket();
                        packet.ReadBuffer(buffer, len);
                        if (LaunchConfigManager.LogEnable("NetManager"))
                        {
                            //LogUtils.LogWarning($"Net read num = {packet.number} cmd = {packet.cmd} zip = {packet.zip} len = {len}");
                        }

                        recvPool.AddRecvPacket(packet);

                        buffer.TruncateRead();
                    }
                    else
                    {
                        if (LaunchConfigManager.LogEnable("NetManager"))
                        {
                            //   LogUtils.LogWarning($"Net read out of bound, do revert");
                        }

                        buffer.RevertLastRead();
                        break;
                    }
                }
            }
            catch (SocketException e)
            {
                LogUtils.LogError($"Socket error : {e.SocketErrorCode} {e.ToString()}");
                Close(m_socket, true);
                closeEvent.Set();
                connectEvent.Reset();
            }
            catch (ThreadAbortException e)
            {
                //忽略Thread.Abort异常
                Close(m_socket, true);
                closeEvent.Set();
                connectEvent.Reset();
            }
            catch (Exception e)
            {
                LogUtils.LogError("Socket error : ", e);
                Close(m_socket, true);
                closeEvent.Set();
                connectEvent.Reset();
            }

            //Thread.Sleep(100);
        }
    }