X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=cloud%2Fsamples%2Fclient%2Fairconditioner%2Faircon_controller.cpp;h=bc9a929a1e7e7ab5222e87fc9f4ae0199765a192;hb=fe2cd10b2ed7e7e311feaead4e1eb4069c3ee1d0;hp=6dc5e0264623136ab5f926e169f6d5d9ff1c15a4;hpb=bd588935ec725cc85ce3dc98838fa1ff8ccb497d;p=platform%2Fupstream%2Fiotivity.git diff --git a/cloud/samples/client/airconditioner/aircon_controller.cpp b/cloud/samples/client/airconditioner/aircon_controller.cpp index 6dc5e02..bc9a929 100644 --- a/cloud/samples/client/airconditioner/aircon_controller.cpp +++ b/cloud/samples/client/airconditioner/aircon_controller.cpp @@ -5,7 +5,6 @@ #include #include #include -#include #include #include "ocstack.h" @@ -14,65 +13,56 @@ #include #include -#define DEFAULT_CONTEXT_VALUE 0x99 - -#define maxSequenceNumber 0xFFFFFF - using namespace OC; using namespace std; condition_variable g_callbackLock; -std::string g_uid; -std::string g_accesstoken; +string g_uid; +string g_accesstoken; string g_host; OC::OCResource::Ptr g_binaryswitchResource; -void printRepresentation(OCRepPayloadValue *value) +void printRepresentation(OCRepresentation rep) { - while (value) + for (auto itr = rep.begin(); itr != rep.end(); ++itr) { - std::cout << "Key: " << value->name; - switch (value->type) + cout << "\t" << itr->attrname() << ":\t" << itr->getValueToString() << endl; + if (itr->type() == AttributeType::Vector) { - case OCREP_PROP_NULL: - std::cout << " Value: None" << std::endl; - break; - case OCREP_PROP_INT: - std::cout << " Value: " << value->i << std::endl; - break; - case OCREP_PROP_DOUBLE: - std::cout << " Value: " << value->d << std::endl; - break; - case OCREP_PROP_BOOL: - std::cout << " Value: " << value->b << std::endl; - break; - case OCREP_PROP_STRING: - std::cout << " Value: " << value->str << std::endl; - break; - case OCREP_PROP_BYTE_STRING: - std::cout << " Value: Byte String" << std::endl; - break; - case OCREP_PROP_OBJECT: - std::cout << " Value: Object" << std::endl; - break; - case OCREP_PROP_ARRAY: - std::cout << " Value: Array" << std::endl; - break; - } - - if (strcmp(value->name, "accesstoken") == 0) - { - g_accesstoken = value->str; + switch (itr->base_type()) + { + case AttributeType::OCRepresentation: + for (auto itr2 : (*itr).getValue >()) + { + printRepresentation(itr2); + } + break; + + case AttributeType::Integer: + for (auto itr2 : (*itr).getValue >()) + { + cout << "\t\t" << itr2 << endl; + } + break; + + case AttributeType::String: + for (auto itr2 : (*itr).getValue >()) + { + cout << "\t\t" << itr2 << endl; + } + break; + + default: + cout << "Unhandled base type " << itr->base_type() << endl; + break; + } } - - if (strcmp(value->name, "uid") == 0) + else if (itr->type() == AttributeType::OCRepresentation) { - g_uid = value->str; + printRepresentation((*itr).getValue()); } - - value = value->next; } } @@ -83,13 +73,20 @@ void handleLoginoutCB(const HeaderOptions &, if (rep.getPayload() != NULL) { - printRepresentation(rep.getPayload()->values); + printRepresentation(rep); + } + + if (ecode == 4) + { + g_accesstoken = rep.getValueToString("accesstoken"); + + g_uid = rep.getValueToString("uid"); } g_callbackLock.notify_all(); } -void printRepresentation(const OCRepresentation &rep) +void printResource(const OCRepresentation &rep) { cout << "URI: " << rep.getUri() << endl; @@ -110,7 +107,7 @@ void printRepresentation(const OCRepresentation &rep) for (auto it = children.begin(); it != children.end(); it++) { - printRepresentation(*it); + printResource(*it); } } @@ -119,7 +116,7 @@ void onObserve(const HeaderOptions /*headerOptions*/, const OCRepresentation &re { try { - if (eCode == OC_STACK_OK && sequenceNumber != maxSequenceNumber + 1) + if (eCode == OC_STACK_OK && sequenceNumber <= MAX_SEQUENCE_NUMBER) { if (sequenceNumber == OC_OBSERVE_REGISTER) { @@ -133,7 +130,7 @@ void onObserve(const HeaderOptions /*headerOptions*/, const OCRepresentation &re { if (eCode == OC_STACK_OK) { - std::cout << "Observe registration failed or de-registration action failed/succeeded" << std::endl; + cout << "Observe registration failed or de-registration action failed/succeeded" << endl; } else { @@ -148,9 +145,9 @@ void onObserve(const HeaderOptions /*headerOptions*/, const OCRepresentation &re } } -void onPut(const HeaderOptions & /*headerOptions*/, const OCRepresentation &rep, const int eCode) +void onPost(const HeaderOptions & /*headerOptions*/, const OCRepresentation &rep, const int eCode) { - cout << "PUT response: " << eCode << endl; + cout << "POST response: " << eCode << endl; printRepresentation(rep); } @@ -161,7 +158,8 @@ void turnOnOffSwitch(bool toTurn) binarySwitch.setValue("value", toTurn); QueryParamsMap query; - g_binaryswitchResource->post("oic.r.switch.binary", DEFAULT_INTERFACE, binarySwitch, query, &onPut); + g_binaryswitchResource->post("oic.r.switch.binary", DEFAULT_INTERFACE, binarySwitch, query, + &onPost); } void getCollectionResource(const HeaderOptions &, @@ -169,7 +167,7 @@ void getCollectionResource(const HeaderOptions &, { cout << "Resource get: " << ecode << endl; - printRepresentation(rep); + printResource(rep); vector children = rep.getChildren(); @@ -219,6 +217,8 @@ void foundAirconditionerResource(shared_ptr resource) void foundDevice(shared_ptr resource) { + cout << "Found device called!" << endl; + vector rt = resource->getResourceTypes(); cout << "Device found: " << resource->uri() << endl; @@ -238,18 +238,32 @@ void foundDevice(shared_ptr resource) OCPlatform::findResource(g_host, searchQuery, static_cast(CT_ADAPTER_TCP | CT_IP_USE_V4), &foundAirconditionerResource); + + OCPlatform::OCPresenceHandle handle; + if (OCPlatform::subscribeDevicePresence(handle, g_host, { resource->sid() }, + static_cast + (CT_ADAPTER_TCP | CT_IP_USE_V4), &onObserve) != OC_STACK_OK) + { + cout << "Device presence failed" << endl; + } } } } -void presenceDevice(OCStackResult , const unsigned int i, const std::string &str) +void errorFoundDevice(const std::string &uri, const int ecode) +{ + cout << "Found device error on " << uri << " code " << ecode << endl; + g_callbackLock.notify_all(); +} + +void presenceDevice(OCStackResult , const unsigned int i, const string &str) { cout << "Presence received, i=" << i << " str=" << str << endl; } static FILE *client_open(const char * /*path*/, const char *mode) { - return fopen("./resource_controller.dat", mode); + return fopen("./aircon_controller.dat", mode); } int main(int argc, char *argv[]) @@ -287,7 +301,7 @@ int main(int argc, char *argv[]) mutex blocker; - unique_lock lock(blocker); + unique_lock lock(blocker); if (argc == 5) { @@ -319,7 +333,7 @@ int main(int argc, char *argv[]) result = OCPlatform::findResource(g_host, "/oic/res?rt=oic.wk.d", static_cast(CT_ADAPTER_TCP | CT_IP_USE_V4), - &foundDevice); + &foundDevice, &errorFoundDevice); cout << " result: " << result << endl;