// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "AlarmMessageHandler.hpp" #include "ServiceTime.hpp" #include #include #include namespace alarms { AlarmMessageHandler::AlarmMessageHandler(stm::ServiceTime *service, std::unique_ptr &&alarmOperations) : service{service}, alarmOperations{std::move(alarmOperations)} {}; auto AlarmMessageHandler::handleGetAlarm(AlarmGetRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](AlarmGetRequestMessage *request, IAlarmOperations::OnGetAlarmProcessed callback) { alarmOperations->getAlarm(request->id, callback); }); } auto AlarmMessageHandler::handleAddAlarm(AlarmAddRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](AlarmAddRequestMessage *request, IAlarmOperations::OnAddAlarmProcessed callback) { alarmOperations->addAlarm(request->alarmEvent, callback); }); } auto AlarmMessageHandler::handleUpdateAlarm(AlarmUpdateRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](AlarmUpdateRequestMessage *request, IAlarmOperations::OnUpdateAlarmProcessed callback) { alarmOperations->updateAlarm(request->alarmEvent, callback); }); } auto AlarmMessageHandler::handleRemoveAlarm(AlarmRemoveRequestMessage *request) -> std::shared_ptr { return handleWithCallback( request, [&](AlarmRemoveRequestMessage *request, IAlarmOperations::OnRemoveAlarmProcessed callback) { alarmOperations->removeAlarm(request->id, callback); }); } auto AlarmMessageHandler::handleGetAlarmsInRange(AlarmsGetInRangeRequestMessage *request) -> std::shared_ptr { return handleWithCallback, std::uint32_t>>( request, [&](AlarmsGetInRangeRequestMessage *request, IAlarmOperations::OnGetAlarmsInRangeProcessed callback) { alarmOperations->getAlarmsInRange( request->start, request->end, request->offset, request->limit, std::move(callback)); }); } auto AlarmMessageHandler::handleGetNextSingleEvents(AlarmGetNextSingleEventsRequestMessage *request) -> std::shared_ptr { return handleWithCallback>( request, [&](AlarmGetNextSingleEventsRequestMessage *request, IAlarmOperations::OnGetNextSingleProcessed callback) { alarmOperations->getNextSingleEvents(TimePointNow(), callback); }); } auto AlarmMessageHandler::handleMinuteUpdated() -> void { alarmOperations->minuteUpdated(TimePointNow()); } auto AlarmMessageHandler::addAlarmExecutionHandler(const alarms::AlarmType type, const std::shared_ptr handler) -> void { alarmOperations->addAlarmExecutionHandler(type, handler); } template auto AlarmMessageHandler::handleWithCallback( RequestType *request, const std::function)> &alarmOperationsCallback) -> std::shared_ptr { auto callback = [&, requestPtr = std::make_shared(*request)](CallbackParamType param) { auto response = std::make_shared(param); service->bus.sendResponse(response, requestPtr); }; alarmOperationsCallback(request, callback); return sys::MessageNone{}; } } // namespace alarms