BastEt 阅读(1689) 评论(0)
编译quickfast,其实很容易就编译出来了,我用的是vc2003,把xerces解析的地方去掉了。

QQ:43791167,有不对或者好的思路,不妨共享。

一般要修改一些地方,比如说加上decoder的设置模板id,在message里加个成员变量templateid,这样会方便不少。
比如这里可能就可以这样写:
Messages::MessageBuilder &
GenericMessageBuilder::startMessage(
const std::string & applicationType,
const std::string & applicationTypeNamespace,
size_t size,
template_id_t tid)
{
message_.reset(new Messages::Message(size));
message_->setApplicationType(applicationType, applicationTypeNamespace);
message_->settid(tid);
return *this;
}

void
Decoder::decodeMessage(
DataSource & source,
Messages::ValueMessageBuilder & messageBuilder)
这里面就可以:
Messages::ValueMessageBuilder & bodyBuilder(
messageBuilder.startMessage(
templatePtr->getApplicationType(),
templatePtr->getApplicationTypeNamespace(),
templatePtr->fieldCount(),
templateId_));

decodeSegmentBody(source, pmap, templatePtr, bodyBuilder);

还有一些简单的助手函数可以帮助解析。
uint64 getUnsignedInteger2(const field_id_t & identity, uint64 defaultvalue=0)const
{
uint64 value;
if(getUnsignedInteger(identity,value))
return value;
else
return defaultvalue;
}
bool getSignedInteger(const field_id_t & identity, int64 & value)const
{
FieldCPtr field;
bool result = getField(identity, field);
if(result)
{
value = field->toSignedInteger();
}
return result;
}
int64 getSignedInteger2(const field_id_t & identity, int64 defaultvalue=0)const
{
int64 value;
if(getSignedInteger(identity,value))
return value;
else
return defaultvalue;
}
bool getDecimal(const field_id_t & identity, Decimal & value)const
{
FieldCPtr field;
bool result = getField(identity, field);
if(result)
{
value = field->toDecimal();
}
return result;
}
double getDecimal2(const field_id_t & identity, double defaultvalue=0.0f)const
{
Decimal value;
if(getDecimal(identity,value))
return value;
else
return defaultvalue;
}
bool getString(const field_id_t & identity, const StringBuffer *& value)const
{
FieldCPtr field;
bool result = getField(identity, field);
if(result)
{
value = &field->toString();
}
return result;
}
std::string getString2(const field_id_t & identity, const char *defaultstr="")const
{
const StringBuffer *value=NULL;
if(getString(identity,value))
return *value;
else
return defaultstr;
}

发表评论
切换编辑模式