Пример #1
0
        void ResourceHosting::discoveryHandler(RemoteObjectPtr remoteResource)
        {
            std::cout << "ResourceHosting: Discovered device with uri: " << remoteResource->getUri() << std::endl;
            auto discoverdUri = remoteResource->getUri();
            if (discoverdUri.compare(
                    discoverdUri.size()-HOSTING_TAG_SIZE, HOSTING_TAG_SIZE, HOSTING_TAG) != 0)
            {
                return;
            }

            auto foundHostingObject = findRemoteResource(remoteResource);
            if (foundHostingObject != nullptr) return;

            try
            {
                HostingObjectKey key = generateHostingObjectKey(remoteResource);
                foundHostingObject = HostingObject::createHostingObject(remoteResource,
                        std::bind(&ResourceHosting::destroyedHostingObject, this, key));

                RHLock lock(m_mutexForList);
                m_hostingObjects.insert(std::make_pair(key, foundHostingObject));

            } catch (const RCSException & e)
            {
                OIC_HOSTING_LOG(DEBUG,
                        "[ResourceHosting::discoverHandler]InvalidParameterException:%s", e.what());
            }
        }
bool ResourceHosting::isSameRemoteResource(
        RemoteObjectPtr remoteResource_1, RemoteObjectPtr remoteResource_2)
{
    bool ret = false;
    if(remoteResource_1->getAddress() == remoteResource_2->getAddress() &&
       remoteResource_1->getUri() == remoteResource_2->getUri())
    {
        ret = true;
    }
    return ret;
}
Пример #3
0
HostingObject::ResourceObjectPtr HostingObject::createMirroredServer(RemoteObjectPtr rObject)
{
    ResourceObjectPtr retResource = nullptr;
    if(rObject != nullptr)
    {
        std::string fulluri = rObject->getUri();
        std::string uri = fulluri.substr(0, fulluri.size()-8);
        std::vector<std::string> types = rObject->getTypes();
        std::vector<std::string> interfaces = rObject->getInterfaces();
        try
        {
            std::string type = types.begin()->c_str();
            std::string interface = interfaces.begin()->c_str();
            retResource = RCSResourceObject::Builder(uri, type, interface).
                    setDiscoverable(true).setObservable(true).build();

            // TODO need to bind types and interfaces
            retResource->setAutoNotifyPolicy(RCSResourceObject::AutoNotifyPolicy::UPDATED);
            retResource->setSetRequestHandler(pSetRequestHandler);
        }catch(...)
        {
            OIC_HOSTING_LOG(DEBUG, "[HostingObject::createMirroredServer] %s", "PlatformException");
            throw;
        }
    }
    else
    {
        throw PlatformException(OC_STACK_ERROR);
    }

    return retResource;
}
void ResourceHosting::discoverHandler(RemoteObjectPtr remoteResource)
{
    std::string discoverdUri = remoteResource->getUri();
    if(discoverdUri.compare(
            discoverdUri.size()-HOSTING_TAG_SIZE, HOSTING_TAG_SIZE, HOSTING_TAG) != 0)
    {
        return;
    }

    HostingObjectPtr foundHostingObject = findRemoteResource(remoteResource);
    if(foundHostingObject == nullptr)
    {
        try
        {
            foundHostingObject = std::make_shared<HostingObject>();
            foundHostingObject->initializeHostingObject(remoteResource,
                    std::bind(&ResourceHosting::destroyedHostingObject, this,
                            HostingObjectWeakPtr(foundHostingObject)));
            hostingObjectList.push_back(foundHostingObject);
        }catch(const RCSInvalidParameterException &e)
        {
            OIC_HOSTING_LOG(DEBUG,
                    "[ResourceHosting::discoverHandler]InvalidParameterException:%s", e.what());
        }
    }
}
Пример #5
0
 ResourceHosting::HostingObjectKey ResourceHosting::generateHostingObjectKey(
         RemoteObjectPtr rResource)
 {
     return generateHostingObjectKey(rResource->getAddress(), rResource->getUri());
 }