当前位置: 首页>>代码示例>>C++>>正文


C++ RoutableMessageHeader类代码示例

本文整理汇总了C++中RoutableMessageHeader的典型用法代码示例。如果您正苦于以下问题:C++ RoutableMessageHeader类的具体用法?C++ RoutableMessageHeader怎么用?C++ RoutableMessageHeader使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了RoutableMessageHeader类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: processMessage

 /**
  * Process a message that may be meant for the proximity system
  */
 virtual void processMessage(const RoutableMessageHeader& mesg,
                             MemoryReference message_body) {
     internalProcessOpaqueProximityMessage(mesg.has_source_object()?&mesg.source_object():NULL,
                                           mesg,
                                           message_body.data(),
                                           message_body.size(),true);
 }
开发者ID:nazam77,项目名称:sirikata,代码行数:10,代码来源:ObjectSpaceBridgeProximitySystem.hpp

示例2: processMessage

void Space::processMessage(const ObjectReference*ref,MemoryReference message){
    
    RoutableMessageHeader hdr;
    MemoryReference message_body=hdr.ParseFromArray(message.data(),message.size());
    if (!hdr.has_source_object()&&ref) {
        hdr.set_source_object(*ref);
    }
    this->processMessage(hdr,message_body);
}
开发者ID:MikeSofaer,项目名称:sirikata,代码行数:9,代码来源:Space.cpp

示例3: addressMessage

 virtual DidAlterMessage addressMessage(RoutableMessageHeader&output,
                             const ObjectReference*source,
                             const ObjectReference*destination) {
     return UNSPOILED_MESSAGE;
     if (0) {//you might want to do this if you are a forwarding class or something more advanced
         if (source)
             output.set_source_object(*source);
         if (destination)
             output.set_destination_object(*destination);
     }
 }
开发者ID:nazam77,项目名称:sirikata,代码行数:11,代码来源:ObjectSpaceBridgeProximitySystem.hpp

示例4: go

    void go() {
        mSuccess = false;
        Persistence::Protocol::ReadWriteSet rws;
        Persistence::Protocol::IStorageElement el = rws.add_reads();
        el.set_field_name("ObjectList");
//        el.set_object_uuid(UUID::null());
//        el.set_field_id(0);
        RoutableMessageHeader hdr;
        hdr.set_source_object(ObjectReference::spaceServiceID());
        hdr.set_source_port(mPort);
        hdr.set_destination_port(Services::PERSISTENCE);
        hdr.set_destination_object(ObjectReference::spaceServiceID());
        std::string body;
        rws.SerializeToString(&body);
        mObjectHost->processMessage(hdr, MemoryReference(body));
    }
开发者ID:mcbarnes,项目名称:sirikata,代码行数:16,代码来源:main.cpp

示例5: processMessage

void QueryTracker::processMessage(const RoutableMessageHeader &msgHeader, MemoryReference body) {
    if (!msgHeader.has_reply_id()) {
        SILOG(cppoh, error, "QueryTracker::processMessage called for non-reply");
        return; // Not a response message--shouldn't have gotten here.
    }
    // This is a response message;
    int64 id = msgHeader.reply_id();
    SentMessageMap::iterator iter = mSentMessages.find(id);
    if (iter != mSentMessages.end()) {
        if ((!iter->second->header().has_destination_space() ||
             iter->second->header().destination_space() == msgHeader.destination_space()) &&
            iter->second->getRecipient() == msgHeader.source_object())
        {
            iter->second->processMessage(msgHeader, body);
        } else {
            ObjectReference dest(ObjectReference::null());
            if (msgHeader.has_destination_object()) {
                dest = msgHeader.destination_object();
            }
            std::ostringstream os;
            os << "Response message with ID "<<id<<" to object "<<dest<<
                " should come from "<<iter->second->getRecipient() <<
                " but instead came from " <<msgHeader.source_object();
            SILOG(cppoh, warning, os.str());
        }
    } else {
        SILOG(cppoh, warning, "Got a reply for unknown query ID "<<id);
    }
}
开发者ID:MikeSofaer,项目名称:sirikata,代码行数:29,代码来源:QueryTracker.cpp

示例6: processMessage

void MonoVWObjectScript::processMessage(const RoutableMessageHeader&receivedHeader , MemoryReference body){
    std::string header;
    receivedHeader.SerializeToString(&header);
    MonoContext::getSingleton().push(MonoContextData());
    MonoContext::getSingleton().setVWObject(mParent,mDomain);
    try {
        Mono::Object retval=mObject.send("processMessage",mDomain.ByteArray(header.data(),(unsigned int)header.size()),mDomain.ByteArray((const char*)body.data(),(unsigned int)body.size()));
    }catch (Mono::Exception&e) {
        SILOG(mono,debug,"Message Exception "<<e);
    }
    MonoContext::getSingleton().pop();
}
开发者ID:,项目名称:,代码行数:12,代码来源:

示例7: processMessage

 void processMessage(const RoutableMessageHeader &hdr, MemoryReference body) {
     Persistence::Protocol::Response resp;
     resp.ParseFromArray(body.data(), body.length());
     if (hdr.has_return_status() || resp.has_return_status()) {
         SILOG(cppoh,info,"Failed to connect to database: "<<hdr.has_return_status()<<", "<<resp.has_return_status());
         mSuccess = true;
         return;
     }
     Protocol::UUIDListProperty uuidList;
     if (resp.reads(0).has_return_status()) {
         SILOG(cppoh,info,"Failed to find ObjectList in database.");
         mSuccess = true;
         return;
     }
     uuidList.ParseFromString(resp.reads(0).data());
     for (int i = 0; i < uuidList.value_size(); i++) {
         SILOG(cppoh,info,"Loading object "<<ObjectReference(uuidList.value(i)));
         HostedObjectPtr obj = HostedObject::construct<HostedObject>(mObjectHost, uuidList.value(i));
         obj->initializeRestoreFromDatabase(mSpace, HostedObjectPtr());
     }
     mSuccess = true;
 }
开发者ID:mcbarnes,项目名称:sirikata,代码行数:22,代码来源:main.cpp

示例8: SILOG

void SingleStreamProximityConnection::processMessage(const RoutableMessageHeader&hdr,
                                                     MemoryReference message_body) {
    ObjectStreamMap::iterator where=mObjectStreams.find(hdr.has_source_object()?hdr.source_object():ObjectReference::null());
    if (where==mObjectStreams.end()) {
        where=mObjectStreams.find(hdr.has_destination_object()?hdr.destination_object():ObjectReference::null());
    }
    if (where==mObjectStreams.end()) {
        SILOG(proximity,error,"Cannot locate object with OR "<<hdr.source_object()<<" in the proximity connection map: "<<hdr.has_source_object());
    } else {
        std::string data;
        RoutableMessageHeader rmh;
        rmh.SerializeToString(&data);
        where->second->send(MemoryReference(data),message_body,Network::ReliableOrdered);
    }
}
开发者ID:,项目名称:,代码行数:15,代码来源:

示例9: processRPC

bool MonoVWObjectScript::processRPC(const RoutableMessageHeader &receivedHeader, const std::string &name, MemoryReference args, MemoryBuffer &returnValue){
    MonoContext::getSingleton().push(MonoContextData());
    MonoContext::getSingleton().setVWObject(mParent,mDomain);
    std::string header;
    receivedHeader.SerializeToString(&header);
    try {
        Mono::Object retval=mObject.send("processRPC",mDomain.ByteArray(header.data(),(unsigned int)header.size()),mDomain.String(name),mDomain.ByteArray((const char*)args.data(),(int)args.size()));
        if (!retval.null()) {
            returnValue=retval.unboxByteArray();
            MonoContext::getSingleton().pop();
            return true;
        }
        MonoContext::getSingleton().pop();
        return false;
    }catch (Mono::Exception&e) {
        SILOG(mono,debug,"RPC Exception "<<e);
        MonoContext::getSingleton().pop();
        return false;        
    }
    MonoContext::getSingleton().pop();
    return true;
}
开发者ID:,项目名称:,代码行数:22,代码来源:

示例10: timedOut

 void timedOut(const boost::system::error_code &error) {
     std::auto_ptr<TimerHandler> scopedDestructor(this);
     if (error == boost::asio::error::operation_aborted) {
         return; // don't care if the timer was cancelled.
     }
     RoutableMessageHeader msg;
     if (mSentMessage->header().has_destination_object()) {
         msg.set_source_object(mSentMessage->header().destination_object());
     }
     if (mSentMessage->header().has_destination_space()) {
         msg.set_source_space(mSentMessage->header().destination_space());
     }
     msg.set_source_port(mSentMessage->header().destination_port());
     msg.set_return_status(RoutableMessageHeader::TIMEOUT_FAILURE);
     msg.set_reply_id(mSentMessage->getId());
     mSentMessage->mTimerHandle=NULL;
     mSentMessage->mResponseCallback(mSentMessage, msg, MemoryReference(NULL,0));
     //formerly called this, but that asked asio to unset an ignored callback mSentMessage->processMessage(msg, MemoryReference(NULL,0));
 }
开发者ID:danx0r,项目名称:sirikata,代码行数:19,代码来源:SentMessage.cpp

示例11: 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;
        }

    }
开发者ID:nazam77,项目名称:sirikata,代码行数:89,代码来源:ObjectSpaceBridgeProximitySystem.hpp


注:本文中的RoutableMessageHeader类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。