本文整理汇总了C++中RoutableMessageHeader::source_port方法的典型用法代码示例。如果您正苦于以下问题:C++ RoutableMessageHeader::source_port方法的具体用法?C++ RoutableMessageHeader::source_port怎么用?C++ RoutableMessageHeader::source_port使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类RoutableMessageHeader
的用法示例。
在下文中一共展示了RoutableMessageHeader::source_port方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: internalProcessOpaqueProximityMessage
/**
* Process a message that may be meant for the proximity system
* \returns true if object was deleted
*/
OpaqueMessageReturnValue internalProcessOpaqueProximityMessage(
const ObjectReference*object,
const RoutableMessageHeader& hdr,
const void *serializedMessageBody,
size_t serializedMessageBodySize,
bool trusted) {
try {
RoutableMessage msg(hdr,serializedMessageBody,serializedMessageBodySize);
MessageBundle sendState=DELIVER_TO_UNKNOWN;
bool deliverAllMessages=true;
int len=msg.body().message_size();
OpaqueMessageReturnValue obj_is_deleted=OBJECT_NOT_DESTROYED;
bool disconnection=false;
bool registration=false;
for (int i=0;i<len;++i) {
if (trusted||(hdr.has_source_object()&&hdr.source_object()==ObjectReference::spaceServiceID()&&hdr.source_port()==mRegistrationPort)) {
if(msg.body().message_names(i)=="DelObj") {
disconnection=true;
obj_is_deleted=OBJECT_DELETED;
}
if(msg.body().message_names(i)=="RetObj") {
registration=true;
Sirikata::Protocol::RetObj ro;
ro.ParseFromString(msg.body().message_arguments(i));
newObj(ro,msg.body().message_arguments(i).data(),msg.body().message_arguments(i).size());
}
}
if (!forwardThisName(disconnection,msg.body().message_names(i))) {
if (len==1) return obj_is_deleted;
deliverAllMessages=false;
}else {
if (msg.body().message_names(i)==proxCallbackName()) {
if (sendState==DELIVER_TO_UNKNOWN||sendState==DELIVER_TO_OBJECT)
sendState=DELIVER_TO_OBJECT;
else
sendState=DELIVER_TO_BOTH;
}else{
if (sendState==DELIVER_TO_UNKNOWN||sendState==DELIVER_TO_PROX)
sendState=DELIVER_TO_PROX;
else
sendState=DELIVER_TO_BOTH;
}
}
}
if (sendState==DELIVER_TO_UNKNOWN)
return obj_is_deleted;//no messages considered worth forwarding to the proximity system
if (sendState==DELIVER_TO_BOTH) {
SILOG(prox,info,"Message with recipients both proximity and object bundled into the same message: not delivering.");
return obj_is_deleted;
}
/* NOT SURE THIS IS NECESSARY -- do these messages already have addresses on them?*/
DidAlterMessage alteration;
if (sendState==DELIVER_TO_PROX)
alteration=addressMessage(msg,object,NULL);
else
alteration=addressMessage(msg,NULL,object);
if (deliverAllMessages&&sendState==DELIVER_TO_PROX) {
sendMessage(*object,msg,serializedMessageBody,serializedMessageBodySize);
} else if (deliverAllMessages&&sendState==DELIVER_TO_OBJECT) {
deliverMessage(*object,msg,serializedMessageBody,serializedMessageBodySize);
}else {
//some messages are not considered worth forwarding to the proximity system or there's a mishmash of destinations
if (msg.body().message_size()<len) {
len=msg.body().message_size();
}
RoutableMessage newMsg (msg);
newMsg.body().clear_message();
for (int i=0;i<len;++i) {
if (forwardThisName(registration||disconnection,msg.body().message_names(i))) {
newMsg.body().add_message(msg.body().message_names(i), msg.body().message_arguments(i));
}
}
if (sendState==DELIVER_TO_OBJECT)
deliverMessage(*object,newMsg,NULL,0);
if (sendState==DELIVER_TO_PROX)
sendMessage(*object,newMsg,NULL,0);
}
return obj_is_deleted;
}catch(std::invalid_argument&ia) {
SILOG(proximity,warning,"Could not parse message");
return OBJECT_NOT_DESTROYED;
}
}