/// <summary> /// 从缓存数据中读取包数据 /// 如果缓存数据中包含完整包数据,则从该缓存数据中取出,并读入到bodybuffer中 /// </summary> public bool UF_Read(CBytesBuffer rawBuffer) { m_TmpBufferToRead.UF_clear(); m_TmpBufferToRead.UF_write(rawBuffer); // CBytesBuffer tmpbuff = new CBytesBuffer(rawBuffer); CBytesBuffer tmpbuff = m_TmpBufferToRead; int packetsize = 0; if (tmpbuff.UF_getSize() < HEAD_SIZE) { //不是完整的协议数据包,等待下次读取 Debugger.UF_Warn(string.Format("NetPacket Buffer Size[{0}] not Long enought to read", tmpbuff.UF_getSize())); return(false); } //校验码比较 uint pMagic = CBytesConvert.UF_readuint32(tmpbuff); if (MAGIC != pMagic) { ///校验码不通过,丢弃该包缓存的全部数据 rawBuffer.UF_popBytes(rawBuffer.Length); Debugger.UF_Error(string.Format("discard package: magic<{0}> | MAGIC<{1}>,RawBuffer Clear", MAGIC, pMagic)); return(false); } //读出包头 this.id = (int)CBytesConvert.UF_readuint32(tmpbuff); this.retCode = (short)CBytesConvert.UF_readuint16(tmpbuff); this.corCode = (int)CBytesConvert.UF_readuint32(tmpbuff); this.size = (int)CBytesConvert.UF_readuint32(tmpbuff); packetsize += HEAD_SIZE; //包体不为0,读出包体 if (this.size > 0) { //buffer 比读出的size长 if (this.size > tmpbuff.UF_getSize()) { //不是完整的协议数据包,等待下次读取 return(false); } //写入到body中 this.m_BodyBuffer.UF_write(tmpbuff.Buffer, (int)this.size); packetsize += this.size; } //清空已经读取的RawBuffer rawBuffer.UF_popBytes(packetsize); return(true); }