diff --git a/CMakeLists.txt b/CMakeLists.txt index 8786164..10ae283 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,6 +75,7 @@ add_executable(owsub src/framework/StorageClass.h src/framework/API_Proxy.h src/framework/ow_constants.h + src/framework/WebSocketClientNotifications.h src/RESTObjects/RESTAPI_SecurityObjects.h src/RESTObjects/RESTAPI_SecurityObjects.cpp src/RESTObjects/RESTAPI_ProvObjects.cpp src/RESTObjects/RESTAPI_ProvObjects.h src/RESTObjects/RESTAPI_GWobjects.h src/RESTObjects/RESTAPI_GWobjects.cpp diff --git a/build b/build index b44fe09..3d9aebb 100644 --- a/build +++ b/build @@ -1 +1 @@ -65 \ No newline at end of file +68 \ No newline at end of file diff --git a/src/framework/WebSocketClientNotifications.h b/src/framework/WebSocketClientNotifications.h new file mode 100644 index 0000000..84f6f5f --- /dev/null +++ b/src/framework/WebSocketClientNotifications.h @@ -0,0 +1,160 @@ +// +// Created by stephane bourque on 2022-05-05. +// + +#pragma once + +#include "framework/MicroService.h" + +namespace OpenWifi { + + struct WebNotificationSingleDevice { + std::string serialNumber; + inline void to_json(Poco::JSON::Object &Obj) const { + RESTAPI_utils::field_to_json(Obj,"serialNumber", serialNumber); + } + + inline bool from_json(const Poco::JSON::Object::Ptr &Obj) { + try { + RESTAPI_utils::field_from_json(Obj,"serialNumber", serialNumber); + return true; + } catch (...) { + + } + return false; + } + }; + + struct WebNotificationSingleDeviceFirmwareChange { + std::string serialNumber; + std::string newFirmware; + inline void to_json(Poco::JSON::Object &Obj) const { + RESTAPI_utils::field_to_json(Obj,"serialNumber", serialNumber); + RESTAPI_utils::field_to_json(Obj,"newFirmware", newFirmware); + } + + inline bool from_json(const Poco::JSON::Object::Ptr &Obj) { + try { + RESTAPI_utils::field_from_json(Obj,"serialNumber", serialNumber); + RESTAPI_utils::field_from_json(Obj,"newFirmware", newFirmware); + return true; + } catch (...) { + + } + return false; + } + }; + + inline void WebSocketClientNotificationDeviceFirmwareUpdated(const std::string &SerialNumber, const std::string &Firmware) { + WebSocketNotification N; + N.content.serialNumber = SerialNumber; + N.content.newFirmware = Firmware; + N.type = "device_firmware_upgrade"; + WebSocketClientServer()->SendNotification(N); + } + + inline void WebSocketClientNotificationDeviceConnected(const std::string &SerialNumber) { + WebSocketNotification N; + N.content.serialNumber = SerialNumber; + N.type = "device_connection"; + WebSocketClientServer()->SendNotification(N); + } + + inline void WebSocketClientNotificationDeviceDisconnected(const std::string & SerialNumber) { + WebSocketNotification N; + N.content.serialNumber = SerialNumber; + N.type = "device_disconnection"; + WebSocketClientServer()->SendNotification(N); + } + + struct WebSocketNotificationJobContent { + std::string title, + details, + jobId; + std::vector success, + error, + warning; + uint64_t timeStamp=OpenWifi::Now(); + + void to_json(Poco::JSON::Object &Obj) const; + bool from_json(const Poco::JSON::Object::Ptr &Obj); + }; + + inline void WebSocketNotificationJobContent::to_json(Poco::JSON::Object &Obj) const { + RESTAPI_utils::field_to_json(Obj,"title",title); + RESTAPI_utils::field_to_json(Obj,"jobId",jobId); + RESTAPI_utils::field_to_json(Obj,"success",success); + RESTAPI_utils::field_to_json(Obj,"error",error); + RESTAPI_utils::field_to_json(Obj,"warning",warning); + RESTAPI_utils::field_to_json(Obj,"timeStamp",timeStamp); + RESTAPI_utils::field_to_json(Obj,"details",details); + } + + inline bool WebSocketNotificationJobContent::from_json(const Poco::JSON::Object::Ptr &Obj) { + try { + RESTAPI_utils::field_from_json(Obj,"title",title); + RESTAPI_utils::field_from_json(Obj,"jobId",jobId); + RESTAPI_utils::field_from_json(Obj,"success",success); + RESTAPI_utils::field_from_json(Obj,"error",error); + RESTAPI_utils::field_from_json(Obj,"warning",warning); + RESTAPI_utils::field_from_json(Obj,"timeStamp",timeStamp); + RESTAPI_utils::field_from_json(Obj,"details",details); + return true; + } catch(...) { + + } + return false; + } + + typedef WebSocketNotification WebSocketClientNotificationVenueUpdateJob_t; + + inline void WebSocketClientNotificationVenueUpdateJobCompletionToUser( const std::string & User, WebSocketClientNotificationVenueUpdateJob_t &N) { + N.type = "venue_configuration_update"; + WebSocketClientServer()->SendUserNotification(User,N); + } + + struct WebSocketNotificationRebootList { + std::string title, + details, + jobId; + std::vector success, + warning; + uint64_t timeStamp=OpenWifi::Now(); + + void to_json(Poco::JSON::Object &Obj) const; + bool from_json(const Poco::JSON::Object::Ptr &Obj); + }; + + typedef WebSocketNotification WebSocketClientNotificationVenueRebootList_t; + + inline void WebSocketNotificationRebootList::to_json(Poco::JSON::Object &Obj) const { + RESTAPI_utils::field_to_json(Obj,"title",title); + RESTAPI_utils::field_to_json(Obj,"jobId",jobId); + RESTAPI_utils::field_to_json(Obj,"success",success); + RESTAPI_utils::field_to_json(Obj,"warning",warning); + RESTAPI_utils::field_to_json(Obj,"timeStamp",timeStamp); + RESTAPI_utils::field_to_json(Obj,"details",details); + } + + inline bool WebSocketNotificationRebootList::from_json(const Poco::JSON::Object::Ptr &Obj) { + try { + RESTAPI_utils::field_from_json(Obj,"title",title); + RESTAPI_utils::field_from_json(Obj,"jobId",jobId); + RESTAPI_utils::field_from_json(Obj,"success",success); + RESTAPI_utils::field_from_json(Obj,"warning",warning); + RESTAPI_utils::field_from_json(Obj,"timeStamp",timeStamp); + RESTAPI_utils::field_from_json(Obj,"details",details); + return true; + } catch(...) { + + } + return false; + } + + inline void WebSocketClientNotificationVenueRebootCompletionToUser( const std::string & User, WebSocketClientNotificationVenueRebootList_t &N) { + N.type = "venue_rebooter"; + WebSocketClientServer()->SendUserNotification(User,N); + } + +} // namespace OpenWifi +