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); } }