Example #1
0
 public void StopReceive()
 {
     //使用发送特定消息的方式通知接收Loop停止
     unsafe
     {
         MessageChunk *chunk = _receiveQueue.GetMessageChunkForWrite();
         chunk->Type       = 255;
         chunk->DataLength = 0;
         _receiveQueue.PostMessageChunk(chunk);
     }
 }
        private unsafe void CreateChunk()
        {
            var preChunk = _curChunk;

            if (_queue == null)
            {
                _curChunk = (MessageChunk *)ByteBuffer.Pop();
            }
            else
            {
                _curChunk = _queue.GetMessageChunkForWrite();
            }

            //初始化包的消息头
            _curChunk->Type            = (byte)_msgType;
            _curChunk->ID              = _msgID;
            _curChunk->Flag            = (byte)_msgFlag;
            _curChunk->MessageSourceID = _sourceId;
            _curChunk->DataLength      = MessageChunk.PayloadDataSize;
            //需要设置消息链表
            _curChunk->Next = null;
            if (preChunk == null)
            {
                _curChunk->First = _curChunk;
                _curChunk->Flag |= (byte)MessageFlag.FirstChunk;
            }
            else
            {
                preChunk->Next   = _curChunk;
                _curChunk->First = preChunk->First;
            }
            //设置数据部分位置
            _curDataPtr = MessageChunk.GetDataPtr(_curChunk);
            _maxDataPtr = _curDataPtr + MessageChunk.PayloadDataSize;

            //直接发送preChunk
            if (_queue != null && preChunk != null)
            {
                _queue.PostMessageChunk(preChunk);
            }
        }