protected override void Main() { LogMgr.UnityLog("NetMgr.SenderThread.Main: Begin"); while (!IsTerminateFlagSet()) { bool sleep = false; SendBuffer buffer = null; lock (m_sendMsgs) { if (m_sendMsgs.Count > 0) { buffer = m_sendMsgs.Dequeue(); } else { sleep = true; //LogMgr.UnityError("======sendMsgs.Count ==0 ====="); } } if (buffer != null) { try { NetStream.Write(buffer.msg, 0, buffer.Length); NetStream.Flush(); } catch (IOException e) { LogMgr.UnityError("SenderThread, Message: " + e.Message); LogMgr.UnityError("SenderThread, StackTrace: " + e.StackTrace); LogMgr.UnityError("SenderThread, InnerException.Message: " + e.InnerException.Message); } lock (cacheSendMsgs) { cacheSendMsgs.Cache(buffer); } } if (sleep) { Thread.Sleep(15); } } LogMgr.UnityLog("NetMgr.SenderThread.Main: End"); }
public void send(Int16 cmd, byte[] data, int len) { ConnectIfNeeded(); //没有连上逻辑服,丢掉将要发的消息 if (!m_isConnectted && m_reconnect != null) { return; } SendBuffer msg = null; lock (cacheSendMsgs) { msg = cacheSendMsgs.Get(); } msg.Init(cmd, m_PackHeaderIndex, data, len); m_PackHeaderIndex += 1; if (m_PackHeaderIndex > 9999) { m_PackHeaderIndex = 1; } lock (sendMsgs) { #if UNITY_EDITOR lock (this) { if (m_recordNet) { m_byteSent += msg.Length; } } #endif sendMsgs.Enqueue(msg); } }