本文整理汇总了C++中MessagePtr::ParseFromArray方法的典型用法代码示例。如果您正苦于以下问题:C++ MessagePtr::ParseFromArray方法的具体用法?C++ MessagePtr::ParseFromArray怎么用?C++ MessagePtr::ParseFromArray使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MessagePtr
的用法示例。
在下文中一共展示了MessagePtr::ParseFromArray方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Parse
static MessagePtr Parse(const char* buf, int len, ErrorCode* error)
{
MessagePtr message;
typedef google::protobuf::int32 int32;
// check sum
int32 expectedCheckSum = async::detail::AsInt32(buf + len - kHeaderLen);
int32 checkSum = static_cast<int32>(0
/*::adler32(1,
reinterpret_cast<const Bytef*>(buf),
static_cast<int>(len - kHeaderLen))*/);
if (checkSum == expectedCheckSum)
{
// get message type name
int32 nameLen = async::detail::AsInt32(buf);
if (nameLen >= 2 && nameLen <= len - 2 * kHeaderLen)
{
std::string typeName(buf + kHeaderLen, buf + kHeaderLen + nameLen - 1);
// create message object
message.reset(CreateMessage(typeName));
if (message)
{
// parse from buffer
const char* data = buf + kHeaderLen + nameLen;
int32 dataLen = len - nameLen - 2 * kHeaderLen;
if (message->ParseFromArray(data, dataLen))
{
*error = kNoError;
}
else
{
*error = kParseError;
}
}
else
{
*error = kUnknownMessageType;
}
}
else
{
*error = kInvalidNameLen;
}
}
else
{
*error = kCheckSumError;
}
return message;
}
示例2: parse
MessagePtr ProtobufCodec::parse(char *buf,int len)
{
MessagePtr message;
int32_t nameLen = asInt32(buf);
if(nameLen >=2 && nameLen <= len - kHeaderLen)
{
std::string typeName(buf + kHeaderLen,buf + kHeaderLen + nameLen -1);
//创建消息对象
message.reset(createMessage(typeName));
if(message)
{
const char *data = buf + kHeaderLen + nameLen;
int32_t dataLen = len - nameLen - 2*kHeaderLen;
//从Buffer中获取完整的消息格式
if(message->ParseFromArray(data,dataLen))
{
printf("解析消息成功\n");
}
}
}
return message;
}