public override bool getValue(IoBuffer ioBuffer, System.Type type, byte flag, out object value) { value = null; int len; if (!readVarInt32(ioBuffer, out len)) { return(false); } if (ioBuffer.ReadSize < len) { Debuger.LogError("可读字节长度不足" + len); return(false); } string str = ioBuffer.ReadOnlyStr(len); value = str; AddLog(value); return(true); }
public static Message FromIOBuffer(IoBuffer inBuf, int dataLen) { var msg = get(); do { if (dataLen < 12) { break; } else { dataLen -= 12; } msg.m_module = inBuf.ReadInt32(); msg.m_command = inBuf.ReadInt32(); msg.m_flag = inBuf.ReadInt32(); //如果是回应消息,就要提取错误码 if ((msg.m_flag & MSG_FLAG_RESPONSE) != 0) { if (dataLen < 4) { break; } else { dataLen -= 4; } msg.m_code = inBuf.ReadInt32(); } else { msg.m_code = 0; } //如果有错误消息,就要提取错误消息 if ((msg.m_flag & MSG_FLAG_ERR_MSG) != 0) { if (dataLen < 4) { break; } else { dataLen -= 4; } var len = inBuf.ReadInt32(); if (len < 0 || dataLen < len) { break; } else { dataLen -= len; } msg.m_msg = inBuf.ReadOnlyStr(len); } else { msg.m_msg = null; } //有消息体? if (dataLen > 0) { var bodyBuf = new IoBuffer(dataLen); inBuf.Read(bodyBuf, dataLen); msg.m_body = bodyBuf; } else { msg.m_body = null; } return(msg); }while (false); //对象放回池里 put(msg); //能到这里来?那说明前面遇到break,说明数据不够长 Util.SafeLogError("Message~fromIOBuffer数据不够长"); //跳过还未读的 inBuf.Skip(dataLen); //返回null return(null); }