X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fexamples%2Fpresenceserver.cpp;h=c8c7f9c295ae61286504b07af290ea0826c340ea;hb=557f1a83fc2108899640a599d9bb5e22bc5bc91b;hp=18e0d7ec237db8d046947ad347c6614ecbf47ce0;hpb=b1586abc818a5b11670da9426b10901477aadde6;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/examples/presenceserver.cpp b/resource/examples/presenceserver.cpp index 18e0d7e..c8c7f9c 100644 --- a/resource/examples/presenceserver.cpp +++ b/resource/examples/presenceserver.cpp @@ -23,21 +23,53 @@ /// (properties and methods) and host this resource on the server. /// +#include "iotivity_config.h" #include +#ifdef HAVE_PTHREAD_H #include +#endif #include #include #include #include "OCPlatform.h" #include "OCApi.h" +#include "ocpayload.h" + +#ifdef HAVE_WINDOWS_H +#include +#endif using namespace OC; using namespace std; #define numPresenceResources (2) +// Set of strings for each of platform Info fields +std::string platformId = "0A3E0D6F-DBF5-404E-8719-D6880042463A"; +std::string manufacturerName = "OCF"; +std::string manufacturerLink = "https://www.iotivity.org"; +std::string modelNumber = "myModelNumber"; +std::string dateOfManufacture = "2016-01-15"; +std::string platformVersion = "myPlatformVersion"; +std::string operatingSystemVersion = "myOS"; +std::string hardwareVersion = "myHardwareVersion"; +std::string firmwareVersion = "1.0"; +std::string supportLink = "https://www.iotivity.org"; +std::string systemTime = "2016-01-15T11.01"; + +// Set of strings for each of device info fields +std::string deviceName = "IoTivity Presence Server"; +std::string specVersion = "core.1.1.0"; +std::string dataModelVersions = "res.1.1.0"; + +// OCPlatformInfo Contains all the platform info to be stored +OCPlatformInfo platformInfo; + +// OCDeviceInfo Contains all the device info to be stored +OCDeviceInfo deviceInfo; + // Forward declaring the entityHandler OCEntityHandlerResult entityHandler(std::shared_ptr request); @@ -141,9 +173,9 @@ public: } } - void addInterface(const std::string& interface) const + void addInterface(const std::string& iface) const { - OCStackResult result = OC::OCPlatform::bindInterfaceToResource(m_resourceHandle, interface); + OCStackResult result = OC::OCPlatform::bindInterfaceToResource(m_resourceHandle, iface); if (OC_STACK_OK != result) { cout << "Binding TypeName to Resource was unsuccessful\n"; @@ -184,12 +216,78 @@ void createPresenceResources() // Create the instance of the resource class (in this case instance of class 'LightResource'). LightResource myLightResource; -OCEntityHandlerResult entityHandler(std::shared_ptr request) +OCEntityHandlerResult entityHandler(std::shared_ptr /*request*/) { cout << "\tIn Server CPP entity handler:\n"; return OC_EH_OK; } +void DeletePlatformInfo() +{ + delete[] platformInfo.platformID; + delete[] platformInfo.manufacturerName; + delete[] platformInfo.manufacturerUrl; + delete[] platformInfo.modelNumber; + delete[] platformInfo.dateOfManufacture; + delete[] platformInfo.platformVersion; + delete[] platformInfo.operatingSystemVersion; + delete[] platformInfo.hardwareVersion; + delete[] platformInfo.firmwareVersion; + delete[] platformInfo.supportUrl; + delete[] platformInfo.systemTime; +} + +void DeleteDeviceInfo() +{ + delete[] deviceInfo.deviceName; + delete[] deviceInfo.specVersion; + OCFreeOCStringLL(deviceInfo.dataModelVersions); +} + +void DuplicateString(char ** targetString, std::string sourceString) +{ + *targetString = new char[sourceString.length() + 1]; + strncpy(*targetString, sourceString.c_str(), (sourceString.length() + 1)); +} + +OCStackResult SetPlatformInfo(std::string platformID, std::string manufacturerName, + std::string manufacturerUrl, std::string modelNumber, std::string dateOfManufacture, + std::string platformVersion, std::string operatingSystemVersion, + std::string hardwareVersion, std::string firmwareVersion, std::string supportUrl, + std::string systemTime) +{ + DuplicateString(&platformInfo.platformID, platformID); + DuplicateString(&platformInfo.manufacturerName, manufacturerName); + DuplicateString(&platformInfo.manufacturerUrl, manufacturerUrl); + DuplicateString(&platformInfo.modelNumber, modelNumber); + DuplicateString(&platformInfo.dateOfManufacture, dateOfManufacture); + DuplicateString(&platformInfo.platformVersion, platformVersion); + DuplicateString(&platformInfo.operatingSystemVersion, operatingSystemVersion); + DuplicateString(&platformInfo.hardwareVersion, hardwareVersion); + DuplicateString(&platformInfo.firmwareVersion, firmwareVersion); + DuplicateString(&platformInfo.supportUrl, supportUrl); + DuplicateString(&platformInfo.systemTime, systemTime); + + return OC_STACK_OK; +} + +OCStackResult SetDeviceInfo(std::string deviceName, std::string specVersion, std::string dataModelVersions) +{ + DuplicateString(&deviceInfo.deviceName, deviceName); + + if (!specVersion.empty()) + { + DuplicateString(&deviceInfo.specVersion, specVersion); + } + + if (!dataModelVersions.empty()) + { + OCResourcePayloadAddStringLL(&deviceInfo.dataModelVersions, dataModelVersions.c_str()); + } + + return OC_STACK_OK; +} + int main() { // Create PlatformConfig object @@ -202,6 +300,30 @@ int main() }; OCPlatform::Configure(cfg); + std::cout << "Starting server & setting platform info\n"; + + OCStackResult result = SetPlatformInfo(platformId, manufacturerName, manufacturerLink, + modelNumber, dateOfManufacture, platformVersion, operatingSystemVersion, + hardwareVersion, firmwareVersion, supportLink, systemTime); + + result = OCPlatform::registerPlatformInfo(platformInfo); + + if (result != OC_STACK_OK) + { + std::cout << "Platform Registration failed\n"; + return -1; + } + + result = SetDeviceInfo(deviceName, specVersion, dataModelVersions); + OCResourcePayloadAddStringLL(&deviceInfo.types, "oic.wk.d"); + + result = OCPlatform::registerDeviceInfo(deviceInfo); + + if (result != OC_STACK_OK) + { + std::cout << "Device Registration failed\n"; + return -1; + } try { using namespace OC::OCPlatform; @@ -210,32 +332,39 @@ int main() // Invoke createResource function of class light. myLightResource.createResource(); - printf("Created first resource of type \"core.light\""); + std :: cout << "Creating first resource of type \"core.light\"" << std :: endl; - printf("\nEnter a key to create the second resource of type \"core.light\"\n"); - getchar(); + std :: cout << "Will start creating/deleting resources for presence in 10 seconds.\n"; + + sleep(10); + + std :: cout << "\nCreating the second resource of type \"core.light\"" << std :: endl; + sleep(1); myLightResource.createResource2(); - printf("\nEnter a key to stop the presence\n"); - getchar(); + std :: cout << "Stopping presence\n" << std :: endl; + sleep(1); stopPresence(); - printf("\nEnter a key to restart the presence\n"); - getchar(); + std :: cout << "Restarting presence\n" << std :: endl; + sleep(1); startPresence(30); - printf("\nEnter a key to create the third resource of type \"core.light\"\n"); - getchar(); + std :: cout << "Creating a third resource of type \"core.light\"\n" << std :: endl; + sleep(1); myLightResource.createResource3(); - printf("\nEnter a key to create two non-operational resources.\"\n"); - getchar(); + std :: cout << "Creating two non-operational resources.\"\n" << std :: endl; + sleep(1); createPresenceResources(); + DeletePlatformInfo(); + DeleteDeviceInfo(); + // A condition variable will free the mutex it is given, then do a non- // intensive block until 'notify' is called on it. In this case, since we // don't ever call cv.notify, this should be a non-processor intensive version @@ -245,9 +374,9 @@ int main() std::unique_lock lock(blocker); cv.wait(lock); } - catch(OCException e) + catch(OCException& e) { - //log(e.what()); + oclog() << "Exception in main: "<< e.what(); } // No explicit call to stop the platform. @@ -255,3 +384,4 @@ int main() return 0; } +