stabilized app
This commit is contained in:
committed by
Torsten (PC)
parent
51fd9fcd13
commit
1451225978
@@ -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[];
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user