From 7c91a64d7137cdc286740c02abf10d5e437d3fc1 Mon Sep 17 00:00:00 2001 From: Sander Speetjens Date: Tue, 22 Jul 2025 19:36:08 +0200 Subject: [PATCH] convert selected move from string to index to reduce data size --- UI/ui_combobox.cpp | 12 ++----- UI/ui_combobox.hpp | 4 +-- UI/ui_item.cpp | 2 +- UI/ui_item.hpp | 2 +- client/simulator_base.cpp | 8 ++--- client/web_socket_wrapper.cpp | 63 ++++++++++++++++++++--------------- client/web_socket_wrapper.hpp | 13 ++++---- server/message_parser.cpp | 2 +- 8 files changed, 54 insertions(+), 52 deletions(-) diff --git a/UI/ui_combobox.cpp b/UI/ui_combobox.cpp index 6321a6a..f01164e 100644 --- a/UI/ui_combobox.cpp +++ b/UI/ui_combobox.cpp @@ -49,20 +49,12 @@ std::string UI_combobox::selected_text() const void UI_combobox::from_json(const json &j) { UI_x_boxes::from_json(j); - std::string selected_str = j.at("selected"); - for (size_t i = 0; i < m_options.size(); i++) - { - if (m_options[i] == selected_str) - { - m_selected = i; - break; - } - } + m_selected = j.at("selected"); } json UI_combobox::to_json(size_t id) const { json j = UI_x_boxes::to_json(id); - j["selected"] = m_options[m_selected]; + j["selected"] = m_selected; return j; } diff --git a/UI/ui_combobox.hpp b/UI/ui_combobox.hpp index aeea437..f742ed3 100644 --- a/UI/ui_combobox.hpp +++ b/UI/ui_combobox.hpp @@ -14,8 +14,8 @@ class UI_combobox : public UI_x_boxes QObject *parent = nullptr); UI_combobox(const json &j, QObject *parent = nullptr); - void set_selected(size_t selected); - void set_selected(std::string selected) override; + void set_selected(size_t selected) override; + void set_selected(std::string selected); size_t selected() const; std::string selected_text() const; diff --git a/UI/ui_item.cpp b/UI/ui_item.cpp index 4ea4277..e32256c 100644 --- a/UI/ui_item.cpp +++ b/UI/ui_item.cpp @@ -158,7 +158,7 @@ json UI_item::to_json(size_t id) const void UI_item::click() {}; -void UI_item::set_selected(std::string selected) +void UI_item::set_selected(size_t selected) { UNUSED(selected); }; diff --git a/UI/ui_item.hpp b/UI/ui_item.hpp index 388a35c..ed1d356 100644 --- a/UI/ui_item.hpp +++ b/UI/ui_item.hpp @@ -47,7 +47,7 @@ class UI_item : public QObject virtual json to_json(size_t id) const; virtual void click(); - virtual void set_selected(std::string selected); + virtual void set_selected(size_t selected); virtual void set_value(double value); virtual void can_send(uint32_t id, uint8_t dlc, std::array payload); virtual void can_clear(); diff --git a/client/simulator_base.cpp b/client/simulator_base.cpp index ee548e5..91630ed 100644 --- a/client/simulator_base.cpp +++ b/client/simulator_base.cpp @@ -326,7 +326,7 @@ void Simulator_base::process_ui_combobox(json &ui_item, QWidget *widget) return; } - QString selected = QString::fromStdString(ui_item["selected"]); + size_t selected = ui_item["selected"]; for (json &item : ui_item["options"]) { @@ -334,9 +334,9 @@ void Simulator_base::process_ui_combobox(json &ui_item, QWidget *widget) combobox->addItem(QString::fromStdString(item)); } - if (combobox->currentText() != selected) + if (combobox->currentIndex() != selected) { - combobox->setCurrentText(selected); + combobox->setCurrentIndex(selected); } } @@ -763,7 +763,7 @@ void Simulator_base::setup_combobox(QWidget *item, size_t index) return; connect(combobox, &QComboBox::activated, this, [=, this] { - m_web_socket->send_event(Web_socket_wrapper::Event::selected, index, combobox->currentText()); + m_web_socket->send_event(Web_socket_wrapper::Event::selected, index, (size_t)combobox->currentIndex()); }); } diff --git a/client/web_socket_wrapper.cpp b/client/web_socket_wrapper.cpp index b03876c..4f2bab2 100644 --- a/client/web_socket_wrapper.cpp +++ b/client/web_socket_wrapper.cpp @@ -26,26 +26,23 @@ Web_socket_wrapper::~Web_socket_wrapper() close(); } -void Web_socket_wrapper::send_command(Command command, size_t id) +void Web_socket_wrapper::send_command(Command c, size_t id) { json j; - switch (command) + j["command"]["type"] = magic_enum::enum_name(c).data(); + switch (c) { case Command::get_UI_element: - j["command"]["type"] = magic_enum::enum_name(command).data(); j["command"]["id"] = id; m_web_socket->sendTextMessage(QString(j.dump().data())); break; case Command::get_UI_elements: - j["command"]["type"] = magic_enum::enum_name(command).data(); m_web_socket->sendTextMessage(QString(j.dump().data())); break; case Command::get_active_simulator_name: - j["command"]["type"] = magic_enum::enum_name(command).data(); m_web_socket->sendTextMessage(QString(j.dump().data())); break; case Command::get_simulators: - j["command"]["type"] = magic_enum::enum_name(command).data(); m_web_socket->sendTextMessage(QString(j.dump().data())); break; default: @@ -53,14 +50,14 @@ void Web_socket_wrapper::send_command(Command command, size_t id) } } -void Web_socket_wrapper::send_command(Command command, QString id) +void Web_socket_wrapper::send_command(Command command, QString val) { json j; + j["command"]["type"] = magic_enum::enum_name(command).data(); switch (command) { case Command::switch_simulator: - j["command"]["type"] = magic_enum::enum_name(command).data(); - j["command"]["name"] = id.toStdString(); + j["command"]["name"] = val.toStdString(); m_web_socket->sendTextMessage(QString(j.dump().data())); break; default: @@ -68,16 +65,16 @@ void Web_socket_wrapper::send_command(Command command, QString id) } } -void Web_socket_wrapper::send_event(Event event, size_t id) +void Web_socket_wrapper::send_event(Event e, size_t id) { if (m_inhibit_events) return; json j; - switch (event) + j["event"]["type"] = magic_enum::enum_name(e).data(); + switch (e) { case Event::clicked: case Event::can_clear: - j["event"]["type"] = magic_enum::enum_name(event).data(); j["event"]["id"] = id; m_web_socket->sendTextMessage(QString(j.dump().data())); break; @@ -86,15 +83,33 @@ void Web_socket_wrapper::send_event(Event event, size_t id) } } -void Web_socket_wrapper::send_event(Event event, size_t id, double val) +void Web_socket_wrapper::send_event(Event e, size_t id, size_t val) { if (m_inhibit_events) return; json j; - switch (event) + j["event"]["type"] = magic_enum::enum_name(e).data(); + switch (e) + { + case Event::selected: + j["event"]["id"] = id; + j["event"]["selected"] = val; + m_web_socket->sendTextMessage(QString(j.dump().data())); + break; + default: + break; + } +} + +void Web_socket_wrapper::send_event(Event e, size_t id, double val) +{ + if (m_inhibit_events) + return; + json j; + j["event"]["type"] = magic_enum::enum_name(e).data(); + switch (e) { case Event::value_changed: - j["event"]["type"] = magic_enum::enum_name(event).data(); j["event"]["id"] = id; j["event"]["value"] = val; m_web_socket->sendTextMessage(QString(j.dump().data())); @@ -104,39 +119,33 @@ void Web_socket_wrapper::send_event(Event event, size_t id, double val) } } -void Web_socket_wrapper::send_event(Event event, size_t id, QString val) +void Web_socket_wrapper::send_event(Event e, size_t id, QString val) { if (m_inhibit_events) return; json j; - switch (event) + j["event"]["type"] = magic_enum::enum_name(e).data(); + switch (e) { case Event::text_changed: - j["event"]["type"] = magic_enum::enum_name(event).data(); j["event"]["id"] = id; j["event"]["text"] = val.toStdString(); m_web_socket->sendTextMessage(QString(j.dump().data())); break; - case Event::selected: - j["event"]["type"] = magic_enum::enum_name(event).data(); - j["event"]["id"] = id; - j["event"]["selected"] = val.toStdString(); - m_web_socket->sendTextMessage(QString(j.dump().data())); - break; default: break; } } -void Web_socket_wrapper::send_event(Event event, size_t id, uint32_t sid, uint8_t dlc, std::array payload) +void Web_socket_wrapper::send_event(Event e, size_t id, uint32_t sid, uint8_t dlc, std::array payload) { if (m_inhibit_events) return; json j; - switch (event) + j["event"]["type"] = magic_enum::enum_name(e).data(); + switch (e) { case Event::can_send: - j["event"]["type"] = magic_enum::enum_name(event).data(); j["event"]["id"] = id; j["event"]["sid"] = sid; j["event"]["dlc"] = dlc; diff --git a/client/web_socket_wrapper.hpp b/client/web_socket_wrapper.hpp index ca070fc..afd0d32 100644 --- a/client/web_socket_wrapper.hpp +++ b/client/web_socket_wrapper.hpp @@ -37,12 +37,13 @@ class Web_socket_wrapper : public QObject public: explicit Web_socket_wrapper(const QUrl &url, QObject *parent = nullptr); ~Web_socket_wrapper(); - void send_command(Command command, size_t id = 0); - void send_command(Command command, QString id); - void send_event(Event event, size_t id); - void send_event(Event event, size_t id, double val); - void send_event(Event event, size_t id, QString val); - void send_event(Event event, size_t id, uint32_t sid, uint8_t dlc, std::array payload); + void send_command(Command c, size_t id = 0); + void send_command(Command c, QString val); + void send_event(Event e, size_t id); + void send_event(Event e, size_t id, size_t val); + void send_event(Event e, size_t id, double val); + void send_event(Event e, size_t id, QString val); + void send_event(Event e, size_t id, uint32_t sid, uint8_t dlc, std::array payload); void close(); void inhibit_events(bool inhibit); diff --git a/server/message_parser.cpp b/server/message_parser.cpp index ef87dd3..d660ab6 100644 --- a/server/message_parser.cpp +++ b/server/message_parser.cpp @@ -99,7 +99,7 @@ void Simulators::event_handler(json event) } case Event::selected: { SPDLOG_DEBUG("Event {}: {} {}", type, (size_t)event.at("id"), std::string(event.at("selected"))); - invoke_active_simulator()->get_UI_item(event.at("id"))->set_selected(std::string(event.at("selected"))); + invoke_active_simulator()->get_UI_item(event.at("id"))->set_selected(event.at("selected")); break; } case Event::can_send: {