Exemple #1
0
            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");
            }
Exemple #2
0
        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);
            }
        }