From ffc407df2ba8a247ad521da2e74890d7d43051fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piet=20G=C3=B6mpel?= Date: Thu, 14 Nov 2024 18:12:09 +0100 Subject: [PATCH] Adressed requested changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Piet Gömpel --- doc/message_dispatching.md | 51 ++++++++++++++++++++++ doc/message_dispatching.png | Bin 78117 -> 0 bytes doc/message_dispatching.puml | 51 ---------------------- lib/ocpp/v201/charge_point.cpp | 76 ++++++++++++++++----------------- 4 files changed, 87 insertions(+), 91 deletions(-) create mode 100644 doc/message_dispatching.md delete mode 100644 doc/message_dispatching.png delete mode 100644 doc/message_dispatching.puml diff --git a/doc/message_dispatching.md b/doc/message_dispatching.md new file mode 100644 index 000000000..1d6b555a9 --- /dev/null +++ b/doc/message_dispatching.md @@ -0,0 +1,51 @@ +# Message Dispatching Class Diagram + +```mermaid +classDiagram +class MessageDispatcherInterface { + +dispatch_call(const json& call, bool triggered = false) + +dispatch_call_async(const json& call, bool triggered = false): std::future~EnhancedMessage~T~~ + +dispatch_call_result(const json& call_result) + +dispatch_call_error(const json& call_error) +} + +class v16_MessageDispatcher { + - MessageQueue& message_queue + - ChargePointConfiguration& configuration + - RegistrationStatus& registration_status +} + +class v201_MessageDispatcher { + - MessageQueue& message_queue + - DeviceModel& device_model + - ConnectivityManager& connectivity_manager + - RegistrationStatusEnum& registration_status +} + +class v201_DataTransferInterface { + +data_transfer_req(request: DataTransferRequest): std::optional~DataTransferResponse~ + +handle_data_transfer_req(call: Call~DataTransferRequest~) +} + +class v201_DataTransfer { + -MessageDispatcherInterface &message_dispatcher + -std::optional~function~ data_transfer_callback +} + +class v201_ChargePoint { + std::unique_ptr~MessageDispatcherInterface~ message_dispatcher + std::unique_ptr~v201_DataTransferInterface~ data_transfer +} + +class v16_ChargePoint { + std::unique_ptr~MessageDispatcherInterface~ message_dispatcher +} + +MessageDispatcherInterface <|-- v16_MessageDispatcher +MessageDispatcherInterface <|-- v201_MessageDispatcher +v201_DataTransferInterface <|-- v201_DataTransfer +MessageDispatcherInterface *-- v201_DataTransfer +MessageDispatcherInterface *-- v201_ChargePoint +v201_DataTransferInterface *-- v201_ChargePoint +MessageDispatcherInterface *-- v16_ChargePoint +``` diff --git a/doc/message_dispatching.png b/doc/message_dispatching.png deleted file mode 100644 index c42187867af3496ff5f2627fe4ef812508c61311..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78117 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 - +dispatch_call_result(const json& call_result) - +dispatch_call_error(const json& call_error) -} - -class v16::MessageDispatcher { - - MessageQueue& message_queue - - ChargePointConfiguration& configuration - - RegistrationStatus& registration_status -} - -class v201::MessageDispatcher { - - MessageQueue& message_queue - - DeviceModel& device_model - - ConnectivityManager& connectivity_manager - - RegistrationStatusEnum& registration_status -} - -interface v201::DataTransferInterface { - +data_transfer_req(request: DataTransferRequest): std::optional - +handle_data_transfer_req(call: Call) -} - -class v201::DataTransfer { - -MessageDispatcherInterface &message_dispatcher - -std::optional> data_transfer_callback -} - -class v201::ChargePoint { - std::unique_ptr message_dispatcher; - std::unique_ptr data_transfer; -} - -class v16::ChargePoint { - std::unique_ptr message_dispatcher; -} - -MessageDispatcherInterface <|-- v16::MessageDispatcher -MessageDispatcherInterface <|-- v201::MessageDispatcher -v201::DataTransferInterface <|-- v201::DataTransfer -MessageDispatcherInterface *-- v201::DataTransfer -MessageDispatcherInterface *-- v201::ChargePoint -v201::DataTransferInterface *-- v201::ChargePoint -MessageDispatcherInterface *-- v16::ChargePoint - -@enduml \ No newline at end of file diff --git a/lib/ocpp/v201/charge_point.cpp b/lib/ocpp/v201/charge_point.cpp index 3f9fda8cc..865947a4f 100644 --- a/lib/ocpp/v201/charge_point.cpp +++ b/lib/ocpp/v201/charge_point.cpp @@ -75,14 +75,7 @@ ChargePoint::ChargePoint(const std::map& evse_connector_struct EVLOG_AND_THROW(std::invalid_argument("Database handler should not be null")); } - if (!this->message_queue) { - EVLOG_AND_THROW(std::invalid_argument("Message Queue should not be null")); - } - initialize(evse_connector_structure, message_log_path); - - this->message_dispatcher = - std::make_unique(*this->message_queue, *this->device_model, registration_status); } ChargePoint::ChargePoint(const std::map& evse_connector_structure, @@ -95,39 +88,6 @@ ChargePoint::ChargePoint(const std::map& evse_connector_struct std::make_shared( std::make_unique(fs::path(core_database_path) / "cp.db"), sql_init_path), nullptr /* message_queue initialized in this constructor */, message_log_path, evse_security, callbacks) { - std::set message_types_discard_for_queueing; - try { - const auto message_types_discard_for_queueing_csl = ocpp::split_string( - this->device_model - ->get_optional_value(ControllerComponentVariables::MessageTypesDiscardForQueueing) - .value_or(""), - ','); - std::transform(message_types_discard_for_queueing_csl.begin(), message_types_discard_for_queueing_csl.end(), - std::inserter(message_types_discard_for_queueing, message_types_discard_for_queueing.end()), - [](const std::string element) { return conversions::string_to_messagetype(element); }); - } catch (const StringToEnumException& e) { - EVLOG_warning << "Could not convert configured MessageType value of MessageTypesDiscardForQueueing. Please " - "check you configuration: " - << e.what(); - } catch (...) { - EVLOG_warning << "Could not apply MessageTypesDiscardForQueueing configuration"; - } - - this->message_queue = std::make_unique>( - [this](json message) -> bool { return this->connectivity_manager->send_to_websocket(message.dump()); }, - MessageQueueConfig{ - this->device_model->get_value(ControllerComponentVariables::MessageAttempts), - this->device_model->get_value(ControllerComponentVariables::MessageAttemptInterval), - this->device_model->get_optional_value(ControllerComponentVariables::MessageQueueSizeThreshold) - .value_or(DEFAULT_MESSAGE_QUEUE_SIZE_THRESHOLD), - this->device_model->get_optional_value(ControllerComponentVariables::QueueAllMessages) - .value_or(false), - message_types_discard_for_queueing, - this->device_model->get_value(ControllerComponentVariables::MessageTimeout)}, - this->database_handler); - - this->message_dispatcher = - std::make_unique(*this->message_queue, *this->device_model, registration_status); } ChargePoint::ChargePoint(const std::map& evse_connector_structure, @@ -1176,6 +1136,42 @@ void ChargePoint::initialize(const std::map& evse_connector_st this->connectivity_manager->set_websocket_connection_failed_callback( std::bind(&ChargePoint::websocket_connection_failed, this, std::placeholders::_1)); + if (this->message_queue == nullptr) { + std::set message_types_discard_for_queueing; + try { + const auto message_types_discard_for_queueing_csl = ocpp::split_string( + this->device_model + ->get_optional_value(ControllerComponentVariables::MessageTypesDiscardForQueueing) + .value_or(""), + ','); + std::transform(message_types_discard_for_queueing_csl.begin(), message_types_discard_for_queueing_csl.end(), + std::inserter(message_types_discard_for_queueing, message_types_discard_for_queueing.end()), + [](const std::string element) { return conversions::string_to_messagetype(element); }); + } catch (const StringToEnumException& e) { + EVLOG_warning << "Could not convert configured MessageType value of MessageTypesDiscardForQueueing. Please " + "check you configuration: " + << e.what(); + } catch (...) { + EVLOG_warning << "Could not apply MessageTypesDiscardForQueueing configuration"; + } + + this->message_queue = std::make_unique>( + [this](json message) -> bool { return this->connectivity_manager->send_to_websocket(message.dump()); }, + MessageQueueConfig{ + this->device_model->get_value(ControllerComponentVariables::MessageAttempts), + this->device_model->get_value(ControllerComponentVariables::MessageAttemptInterval), + this->device_model->get_optional_value(ControllerComponentVariables::MessageQueueSizeThreshold) + .value_or(DEFAULT_MESSAGE_QUEUE_SIZE_THRESHOLD), + this->device_model->get_optional_value(ControllerComponentVariables::QueueAllMessages) + .value_or(false), + message_types_discard_for_queueing, + this->device_model->get_value(ControllerComponentVariables::MessageTimeout)}, + this->database_handler); + } + + this->message_dispatcher = + std::make_unique(*this->message_queue, *this->device_model, registration_status); + if (this->callbacks.configure_network_connection_profile_callback.has_value()) { this->connectivity_manager->set_configure_network_connection_profile_callback( this->callbacks.configure_network_connection_profile_callback.value());