コード例 #1
0
ファイル: QNetMgr.cs プロジェクト: Iskysir/QFramework
 void SendMsgInMainThread(QNetMsg msg)
 {
     lock (this.mRecvLock)
     {
         this.mRecvWaitingMsgQueue.Enqueue(msg);
     }
 }
コード例 #2
0
ファイル: QNetMgr.cs プロジェクト: Iskysir/QFramework
        /// <summary>
        /// 提供给Lua框架的接口,运行在主线程
        /// F**K lua中没有byte[],所以用string
        /// </summary>
        /// <param name="msgType"></param>
        /// <param name="msgData"></param>
        public void SendNetMsg(int msgType, byte[] msgData)
        {
            QNetMsg msg = new QNetMsg(msgType, msgData);

            // 发送
            lock (this.mSendLock)
            {
                this.mSendWaitingMsgQueue.Enqueue(msg);
                Monitor.Pulse(this.mSendLock);
            }
        }
コード例 #3
0
ファイル: QNetMgr.cs プロジェクト: Iskysir/QFramework
 void Send()
 {
     Debug.Log("NetMgr Send Thread start!");
     while (this.mIsRunning)
     {
         if (this.mSendingMsgQueue.Count == 0)
         {
             lock (this.mSendLock)
             {
                 while (this.mSendWaitingMsgQueue.Count == 0)
                 {
                     Monitor.Wait(this.mSendLock);
                 }
                 Queue <QNetMsg> temp = this.mSendingMsgQueue;
                 this.mSendingMsgQueue     = this.mSendWaitingMsgQueue;
                 this.mSendWaitingMsgQueue = this.mSendingMsgQueue;
             }
         }
         else
         {
             while (this.mSendingMsgQueue.Count > 0)
             {
                 QNetMsg msg = this.mSendingMsgQueue.Dequeue();
                 try
                 {
                     // 拼接TLV
                     MemoryStream stream = new MemoryStream();
                     //                        TProtocol proto = new TBinaryProtocol(new TStreamTransport(stream, stream));
                     // 类型
                     //                        proto.WriteI32(msg.Type);
                     // 长度
                     //                        proto.WriteI32(msg.Length);
                     // 值
                     stream.Write(msg.Data, 0, msg.Length);
                     byte[] data = stream.ToArray();
                     this.mSocket.Send(data);
                     stream.Close();
                 }
                 catch (System.Exception e)
                 {
                     Disconnect();
                 }
             }
         }
     }
     this.mSendingMsgQueue.Clear();
     this.mSendWaitingMsgQueue.Clear();
     Debug.Log("NetMgr Send Thread is over!");
 }
コード例 #4
0
ファイル: QNetMgr.cs プロジェクト: Iskysir/QFramework
 void Update()
 {
     if (this.mRecvingMsgQueue.Count == 0)
     {
         lock (this.mRecvLock)
         {
             if (this.mRecvWaitingMsgQueue.Count > 0)
             {
                 Queue <QNetMsg> temp = this.mRecvingMsgQueue;
                 this.mRecvingMsgQueue     = this.mRecvWaitingMsgQueue;
                 this.mRecvWaitingMsgQueue = temp;
             }
         }
     }
     else
     {
         while (this.mRecvingMsgQueue.Count > 0)
         {
             QNetMsg msg = this.mRecvingMsgQueue.Dequeue();
             // 交由Lua解析并处理逻辑
             //                LuaMgr.Instance().CallTableFunction("NetMsgMgr", "HandleNetMsg", msg.Type, msg.Data);
         }
     }
 }