receive skateboard data on backend

This commit is contained in:
sfja 2026-03-28 23:55:42 +01:00
parent 77a21035c3
commit e1f9561937
2 changed files with 18 additions and 14 deletions

View File

@ -2,6 +2,7 @@
#include "mqtt.hpp" #include "mqtt.hpp"
#include "server.hpp" #include "server.hpp"
#include <chrono> #include <chrono>
#include <cstdio>
#include <iostream> #include <iostream>
#include <print> #include <print>
#include <span> #include <span>
@ -17,15 +18,16 @@ int main(void)
{ {
auto client = mst::mqtt::Client("localhost", 1883, "test", "1234"); auto client = mst::mqtt::Client("localhost", 1883, "test", "1234");
client.subscribe("/", [&](std::string_view text) { client.subscribe("/skateboard/update", [&](std::string_view text) {
std::cout << std::format("Received '{}'\n", text); //
std::println("Skateboard: {}", text);
}); });
auto mqtt_thread = std::thread([&]() { auto mqtt_thread = std::thread([&]() {
try { try {
client.run(); client.run();
} catch (mst::mqtt::Error& ex) { } catch (mst::mqtt::Error& ex) {
std::cerr << std::format("MQTT Client failed: {}", ex.what()); std::println(stderr, "MQTT Client failed: {}", ex.what());
std::abort(); std::abort();
} }
}); });

View File

@ -6,6 +6,7 @@
#include <iostream> #include <iostream>
#include <mosquitto.h> #include <mosquitto.h>
#include <mutex> #include <mutex>
#include <print>
#include <string> #include <string>
#include <string_view> #include <string_view>
#include <thread> #include <thread>
@ -27,8 +28,8 @@ static void lib_init()
int minor; int minor;
int revision; int revision;
mosquitto_lib_version(&major, &minor, &revision); mosquitto_lib_version(&major, &minor, &revision);
std::cout << std::format( std::println(
"[MQTT] Initializing mosquitto {}.{}.{}\n", major, minor, revision); "[MQTT] Initializing mosquitto {}.{}.{}", major, minor, revision);
if (mosquitto_lib_init() != MOSQ_ERR_SUCCESS) if (mosquitto_lib_init() != MOSQ_ERR_SUCCESS)
throw Error("failed to initialize"); throw Error("failed to initialize");
@ -46,7 +47,7 @@ static void lib_deinit()
if (!mosquitto_initialized || use_count < 0) if (!mosquitto_initialized || use_count < 0)
return; return;
std::cout << std::format("[MQTT] Deinitializing mosquitto\n"); std::println("[MQTT] Deinitializing mosquitto");
mosquitto_lib_cleanup(); mosquitto_lib_cleanup();
mosquitto_initialized = false; mosquitto_initialized = false;
@ -167,14 +168,15 @@ void Client::subscribe(
{ {
auto inst = static_cast<struct mosquitto*>(m_inst); auto inst = static_cast<struct mosquitto*>(m_inst);
m_subscriptions.emplace_back(topic, std::move(func));
if (auto status = mosquitto_subscribe(inst, NULL, topic.c_str(), 0); if (auto status = mosquitto_subscribe(inst, NULL, topic.c_str(), 0);
status != MOSQ_ERR_SUCCESS) { status != MOSQ_ERR_SUCCESS) {
throw Error(std::format( throw Error(std::format(
"could not subscribe ({})", mosquitto_strerror(status))); "could not subscribe ({})", mosquitto_strerror(status)));
} }
std::println("[MQTT] Subscribed to '{}'", topic);
m_subscriptions.emplace_back(std::move(topic), std::move(func));
} }
void Client::run() void Client::run()
@ -201,22 +203,22 @@ void Client::cb_connect(int rc)
"client could not connect ({})", mosquitto_reason_string(rc))); "client could not connect ({})", mosquitto_reason_string(rc)));
} }
std::cout << std::format("[MQTT] Client connected\n"); std::println("[MQTT] Client connected");
} }
void Client::cb_disconnect() void Client::cb_disconnect()
{ {
std::cout << std::format("[MQTT] Client disconnected\n"); std::println("[MQTT] Client disconnected");
} }
void Client::cb_publish() void Client::cb_publish()
{ {
std::cout << std::format("[MQTT] Message published\n"); std::println("[MQTT] Message published");
} }
void Client::cb_message(std::string_view topic, const void* data, size_t size) void Client::cb_message(std::string_view topic, const void* data, size_t size)
{ {
std::cout << std::format("[MQTT] Message received\n"); std::println("[MQTT] Message received");
auto text = std::string_view(static_cast<const char*>(data), size); auto text = std::string_view(static_cast<const char*>(data), size);
@ -229,12 +231,12 @@ void Client::cb_message(std::string_view topic, const void* data, size_t size)
void Client::cb_subscribe() void Client::cb_subscribe()
{ {
std::cout << std::format("[MQTT] Client subscribed\n"); std::println("[MQTT] Client subscribed");
} }
void Client::cb_unsubscribe() void Client::cb_unsubscribe()
{ {
std::cout << std::format("[MQTT] Client unsubscribed\n"); std::println("[MQTT] Client unsubscribed");
} }
void Client::publish_raw( void Client::publish_raw(