// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "MessageHandler.hpp" #include #include #include #include #include #include #include #include namespace sys { class Service; } // namespace sys using namespace parserFSM; xQueueHandle MessageHandler::sendQueue; MessageHandler::MessageHandler(const std::string &message, sys::Service *OwnerService) : OwnerServicePtr(OwnerService) { try { messageJson = json11::Json::parse(message, JsonErrorMsg); } catch (const std::exception &e) { LOG_ERROR("Cannot create MessageHandler! err:%s", e.what()); } } void MessageHandler::processMessage() { auto context = ContextFactory::create(messageJson); LOG_DEBUG("[MsgHandler]\nmethod: %d\nendpoint: %d\nuuid: %" PRIu32 "\nbody: %s\n", static_cast(context->getMethod()), static_cast(context->getEndpoint()), context->getUuid(), context->getBody().dump().c_str()); auto handler = EndpointFactory::create(*context, OwnerServicePtr); if (handler != nullptr) { handler->handle(*context); } else { LOG_ERROR("No way to handle!"); } } void MessageHandler::putToSendQueue(const std::string &msg) { if (uxQueueSpacesAvailable(sendQueue) != 0) { auto responseString = new std::string(msg); xQueueSend(sendQueue, &responseString, portMAX_DELAY); } }