Пример #1
0
OCEntityHandlerResult entityHandler(std::shared_ptr< OCResourceRequest > request ,
                                    std::shared_ptr< OCResourceResponse > response)
{
    cout << "Sample Provider entityHandler\n";
    if (request)
    {
        cout << "flag : request\n";
        std::string requestType = request->getRequestType();
        int requestFlag = request->getRequestHandlerFlag();

        if (requestFlag == RequestHandlerFlag::InitFlag)
        {
            cout << "\t\trequestFlag : Init\n";
        }

        if (requestFlag == RequestHandlerFlag::RequestFlag)
        {
            cout << "\t\trequestFlag : Request\n";
            if (requestType == "GET")
            {
                cout << "\t\trequestType : GET\n";
                try
                {
                    if (response)
                    {
                        OCRepresentation rep = myResource.get();
                        cout << rep.getJSONRepresentation() << endl;
                        response->setErrorCode(200);
                        response->setResourceRepresentation(rep, DEFAULT_INTERFACE);
                    }
                    else
                    {
                        cout << "response is null\n";
                    }
                }
                catch (exception &e)
                {
                    cout << e.what() << endl;
                }
            }
            else if (requestType == "PUT")
            {
                cout << "\t\t\trequestType : PUT\n";

                OCRepresentation rep = request->getResourceRepresentation();
                myResource.put(rep);

                if (response)
                {
                    response->setErrorCode(200);
                    response->setResourceRepresentation(myResource.get());
                }
            }
            else if (requestType == "POST")
            {
            }
            else if (requestType == "DELETE")
            {
            }
        }
        else if (requestFlag & RequestHandlerFlag::ObserverFlag)
        {
            pthread_t threadId;

            cout << request->getResourceUri() << endl;
            cout << request->getResourceRepresentation().getUri() << endl;

            cout << "========================================================" << endl;
            cout << "Receive ObserverFlag : Start Observe\n";
            cout << "========================================================" << endl;
            g_Observation = 1;

            cout << "\t\trequestFlag : Observer\n";
            static int startedThread = 0;
            if (!startedThread)
            {
                cout << "\t\tpthrerad_create\n";
                pthread_create(&threadId , NULL , ChangeLightRepresentation , (void *) NULL);
                startedThread = 1;
            }
        }
    }
    else
    {
        std::cout << "Request invalid" << std::endl;
    }

    return OC_EH_OK;
}