#include "OCApi.h"
using namespace OC;
+
class ClientWorker
{
private:
- bool m_isFoo;
- int m_barCount;
void putResourceInfo(const HeaderOptions& headerOptions,
const OCRepresentation rep, const OCRepresentation rep2, const int eCode)
{
}
public:
+ ClientWorker(OCConnectivityType ct):m_connectivityType{ct}
+ {}
+
void start()
{
+ std::ostringstream requestURI;
+ requestURI << OC_MULTICAST_DISCOVERY_URI << "?rt=core.foo";
+
std::cout<<"Starting Client find:"<<std::endl;
FindCallback f (std::bind(&ClientWorker::foundResource, this, std::placeholders::_1));
std::cout<<"result:" <<
- OCPlatform::findResource("", "coap://224.0.1.187/oc/core?rt=core.foo", f)
- << std::endl;
+ OCPlatform::findResource("", requestURI.str(), CT_DEFAULT, f)
+ << std::endl;
+
std::cout<<"Finding Resource..."<<std::endl;
{
std::mutex m_resourceLock;
std::condition_variable m_cv;
std::shared_ptr<OCResource> m_resource;
+ OCConnectivityType m_connectivityType;
+ bool m_isFoo;
+ int m_barCount;
};
struct FooResource
uint8_t resourceProperty = OC_DISCOVERABLE;
EntityHandler eh(std::bind(&FooResource::entityHandler,
- this, std::placeholders::_1, std::placeholders::_2));
+ this, std::placeholders::_1));
OCStackResult result = OCPlatform::registerResource(m_resourceHandle,
resourceURI, resourceTypeName,
resourceInterface,
rep.getValue("barCount", m_barCount);
}
- OCEntityHandlerResult entityHandler(std::shared_ptr<OCResourceRequest> request,
- std::shared_ptr<OCResourceResponse> response)
+ OCStackResult sendResponse(std::shared_ptr<OCResourceRequest> pRequest)
+ {
+ auto pResponse = std::make_shared<OC::OCResourceResponse>();
+ pResponse->setRequestHandle(pRequest->getRequestHandle());
+ pResponse->setResourceHandle(pRequest->getResourceHandle());
+ pResponse->setResourceRepresentation(get(), "");
+ pResponse->setErrorCode(200);
+ pResponse->setResponseResult(OC_EH_OK);
+
+ return OCPlatform::sendResponse(pResponse);
+ }
+
+ OCEntityHandlerResult entityHandler(std::shared_ptr<OCResourceRequest> request)
{
std::cout<<"\tConsumer Entity Handler:"<<std::endl;
+ OCEntityHandlerResult ehResult = OC_EH_ERROR;
if(request)
{
- // Note: Most of the handlers are not here, since this is for demoing client/server co-process existence.
+ // Note: Most of the handlers are not here, since this is for
+ // demoing client/server co-process existence.
// See simpleserver for a more complete example.
if(request->getRequestHandlerFlag() == RequestHandlerFlag::RequestFlag)
{
if(request->getRequestType() == "GET")
{
std::cout<<"\t\t\trequestType : GET"<<std::endl;
-
- if(response)
+ if(OC_STACK_OK == sendResponse(request))
{
- response->setErrorCode(200);
- response->setResourceRepresentation(get(), "");
+ ehResult = OC_EH_OK;
}
}
else if (request->getRequestType() == "PUT")
OCRepresentation rep = request->getResourceRepresentation();
put(rep);
-
- if(response)
+ if(OC_STACK_OK == sendResponse(request))
{
- response->setErrorCode(200);
- response->setResourceRepresentation(get(), "");
+ ehResult = OC_EH_OK;
}
}
else
{
- std::cout<<"\t\t\trequestType : UNSUPPORTED: "<<request->getRequestType()<<std::endl;
+ std::cout<<"\t\t\trequestType : UNSUPPORTED: "<<
+ request->getRequestType()<<std::endl;
}
}
else
{
std::cout <<"\t\trequestFlag : UNSUPPORTED: ";
- if(request->getRequestHandlerFlag()==RequestHandlerFlag::InitFlag)
- {
- std::cout<<"InitFlag"<<std::endl;
- }
- else if(request->getRequestHandlerFlag()== RequestHandlerFlag::ObserverFlag)
+ if(request->getRequestHandlerFlag()== RequestHandlerFlag::ObserverFlag)
{
std::cout<<"ObserverFlag"<<std::endl;
}
std::cout << "Request Invalid!"<<std::endl;
}
- return OC_EH_OK;
+ return ehResult;
}
};
-int main()
+
+int main(int argc, char* argv[])
{
+ OCConnectivityType connectivityType = CT_ADAPTER_IP;
+
+ if(argc == 2)
+ {
+ try
+ {
+ std::size_t inputValLen;
+ int optionSelected = std::stoi(argv[1], &inputValLen);
+
+ if(inputValLen == strlen(argv[1]))
+ {
+ if(optionSelected == 0)
+ {
+ connectivityType = CT_ADAPTER_IP;
+ }
+ else
+ {
+ std::cout << "Invalid connectivity type selected. Using default IP" << std::endl;
+ }
+ }
+ else
+ {
+ std::cout << "Invalid connectivity type selected. Using default IP" << std::endl;
+ }
+ }
+ catch(std::exception& )
+ {
+ std::cout << "Invalid input argument. Using IP as connectivity type" << std::endl;
+ }
+ }
+ else
+ {
+ std::cout<< "Usage simpleclientserver 0>" << std::endl;
+ std::cout<< " ConnectivityType: Default IP" << std::endl;
+ std::cout << " ConnectivityType : 0 - IP" << std::endl;
+ }
+
PlatformConfig cfg {
OC::ServiceType::InProc,
OC::ModeType::Both,
return -1;
}
- ClientWorker cw;
+ ClientWorker cw(connectivityType);
cw.start();
}
catch(OCException& e)
{
std::cout<< "Exception in main: "<<e.what()<<std::endl;
}
+
+ return 0;
}
+