// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include namespace settings { class MyService : public sys::Service { public: MyService(const std::string &name) : sys::Service(name) { } std::shared_ptr mySettings; std::vector valChanged; std::string whoRequestedNotifyOnChange; void ValueChanged(std::string value) { valChanged.emplace_back(value); } void debug(const std::string &cmd, const std::string &k, const std::string &v) { std::cout << "[thr_id:" << std::this_thread::get_id() << ", thr_name:" << GetName() << "] " << cmd << " [key, val] = (" << k << ", " << v << ")" << std::endl << std::flush; } sys::MessagePointer DataReceivedHandler(sys::DataMessage *req, sys::ResponseMessage *resp) override { if (auto msg = dynamic_cast(req)) { debug("ReqRegValChg", msg->name, msg->value); whoRequestedNotifyOnChange = msg->sender; mySettings->registerValueChange(msg->name, ([this](std::string value) { ValueChanged(value); auto cnf = std::make_shared("", value); bus.sendUnicast(std::move(cnf), whoRequestedNotifyOnChange); }), settings::SettingsScope::Global); auto cnf = std::make_shared(msg->name, msg->value); bus.sendUnicast(std::move(cnf), whoRequestedNotifyOnChange); } else if (auto msg = dynamic_cast(req)) { // unregister debug("ReqUnRegValChg", msg->name, msg->value); mySettings->unregisterValueChange(msg->name, settings::SettingsScope::Global); auto cnf = std::make_shared(msg->name, msg->value); bus.sendUnicast(std::move(cnf), msg->sender); } else if (auto msg = dynamic_cast(req)) { // set value debug("ReqSetVal", msg->name, msg->value); mySettings->setValue(msg->name, msg->value, settings::SettingsScope::Global); auto cnf = std::make_shared(msg->name, msg->value); bus.sendUnicast(std::move(cnf), msg->sender); } else if (dynamic_cast(msg)) { debug("ReqGetValChg", msg->name, msg->value); } return std::make_shared(); } sys::ReturnCodes InitHandler() override { std::cout << "InitHandler thr_id: " << std::this_thread::get_id() << "name: " << GetName() << std::endl << std::flush; mySettings = std::make_shared(); mySettings->init(service::ServiceProxy(shared_from_this())); return sys::ReturnCodes::Success; } sys::ReturnCodes DeinitHandler() override { mySettings->deinit(); std::cout << "deinithandler thr_id: " << std::this_thread::get_id() << std::endl << std::flush; return sys::ReturnCodes::Success; } sys::ReturnCodes SwitchPowerModeHandler(const sys::ServicePowerMode mode) override { return sys::ReturnCodes::Success; } std::shared_ptr getSettings() { return mySettings; } }; } // namespace settings