本文整理汇总了C++中mercury::Bundle::startReply方法的典型用法代码示例。如果您正苦于以下问题:C++ Bundle::startReply方法的具体用法?C++ Bundle::startReply怎么用?C++ Bundle::startReply使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类mercury::Bundle
的用法示例。
在下文中一共展示了Bundle::startReply方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: handleMessage
/**
* This method handles messages from revivers.
*/
void ReviverSubject::handleMessage( const Mercury::Address & srcAddr,
Mercury::UnpackedMessageHeader & header,
BinaryIStream & data )
{
if (pNub_ == NULL)
{
ERROR_MSG( "ReviverSubject::handleMessage: "
"ReviverSubject not initialised\n" );
return;
}
uint64 currentPingTime = timestamp();
ReviverPriority priority;
data >> priority;
bool accept = (reviverAddr_ == srcAddr);
if (!accept)
{
if (priority < priority_)
{
if (priority_ == 0xff)
{
INFO_MSG( "ReviverSubject::handleMessage: "
"Reviver is %s (Priority %d)\n",
(char *)srcAddr, priority );
}
else
{
INFO_MSG( "ReviverSubject::handleMessage: "
"%s has a better priority (%d)\n",
(char *)srcAddr, priority );
}
accept = true;
}
else
{
uint64 delta = (currentPingTime - lastPingTime_) * uint64(1000);
delta /= stampsPerSecond(); // careful - don't overflow the uint64
int msBetweenPings = int(delta);
if (msBetweenPings > msTimeout_)
{
std::string oldAddr = (char *)reviverAddr_;
INFO_MSG( "ReviverSubject::handleMessage: "
"%s timed out (%d ms). Now using %s\n",
oldAddr.c_str(), msBetweenPings, (char *)srcAddr );
accept = true;
}
}
}
Mercury::Bundle bundle;
bundle.startReply( header.replyID );
if (accept)
{
reviverAddr_ = srcAddr;
lastPingTime_ = currentPingTime;
priority_ = priority;
bundle << REVIVER_PING_YES;
}
else
{
bundle << REVIVER_PING_NO;
}
pNub_->send( srcAddr, bundle );
}