stabilized app

This commit is contained in:
Torsten Schulz
2025-07-21 14:59:43 +02:00
committed by Torsten (PC)
parent 51fd9fcd13
commit 1451225978
25 changed files with 3590 additions and 228 deletions

View File

@@ -1,50 +1,66 @@
#pragma once
#include "message_broker.h"
#include <libwebsockets.h>
#include "connection_guard.h"
#include "connection_pool.h"
#include <uWebSockets/App.h>
#include <unordered_map>
#include "message_broker.h"
#include <nlohmann/json.hpp>
#include <string>
#include <atomic>
#include <thread>
#include <mutex>
#include <shared_mutex>
#include <nlohmann/json.hpp>
#include <queue>
#include <condition_variable>
#include <unordered_map>
#include <vector>
#include <memory>
struct WebSocketUserData {
std::string userId;
bool pongReceived = true;
};
class Worker; // forward
class WebSocketServer {
public:
WebSocketServer(int port, ConnectionPool &pool, MessageBroker &broker);
~WebSocketServer();
void run();
void stop();
void setWorkers(const std::vector<std::unique_ptr<Worker>> &workerList);
private:
void startServer();
void processMessageQueue();
void pingClients();
void handleBrokerMessage(const std::string &message);
void handleWebSocketMessage(uWS::WebSocket<false, true, WebSocketUserData> *ws, std::string_view message, uWS::OpCode opCode);
void handleWebSocketClose(uWS::WebSocket<false, true, WebSocketUserData> *ws);
std::string getUserIdFromFalukantUserId(int &userId);
std::string getUserIdFromFalukantUserId(int falukantUserId);
static int wsCallback(struct lws *wsi,
enum lws_callback_reasons reason,
void *user, void *in, size_t len);
int port;
ConnectionPool &pool;
MessageBroker &broker;
std::atomic<bool> running{false};
struct lws_context *context = nullptr;
std::thread serverThread;
std::thread messageProcessingThread;
std::thread messageThread;
std::thread pingThread;
std::unordered_map<std::string, uWS::WebSocket<false, true, WebSocketUserData> *> connections;
std::shared_mutex connectionsMutex;
std::queue<std::string> messageQueue;
std::mutex queueMutex;
std::condition_variable queueCV;
std::queue<std::string> messageQueue;
std::shared_mutex connectionsMutex;
std::unordered_map<std::string, struct lws*> connections;
std::vector<Worker*> workers;
static struct lws_protocols protocols[];
};