RunicVTT Open Source Virtual Tabletop for TTRPG using P2P
Loading...
Searching...
No Matches
SignalingServer.h
Go to the documentation of this file.
1#pragma once
2#include <string>
3#include <functional>
4#include "rtc/rtc.hpp"
5#include <nlohmann/json.hpp>
6
7// Forward declare to avoid circular include
9
11{
12public:
13 SignalingServer(std::weak_ptr<NetworkManager> parent);
15 void start(unsigned short port);
16 void stop();
17
18 // Router/API
19 void onConnect(std::string clientId, std::shared_ptr<rtc::WebSocket> client);
20 void onMessage(const std::string& clientId, const std::string& text);
21 void sendTo(const std::string& clientId, const std::string& message);
22
23 void broadcast(const std::string& message);
24 void broadcastShutdown();
26
27 // Config
28 void setPendingAuthTimeout(std::chrono::seconds s)
29 {
31 }
32
33 // housekeeping
34 //void prunePending(); // drop pending clients older than timeout
35 void moveToAuthenticated(const std::string& clientId);
36 bool isAuthenticated(const std::string& clientId) const;
37 void disconnectClient(const std::string& clientId);
38
39 const std::unordered_map<std::string, std::shared_ptr<rtc::WebSocket>>& authClients() const
40 {
41 return authClients_;
42 }
43 bool isRunning() const
44 {
45 return is_running;
46 }
47
48private:
49 std::shared_ptr<rtc::WebSocketServer> server;
50 std::weak_ptr<NetworkManager> network_manager;
51 bool is_running = false;
52 // Pending: not authenticated yet
53 std::unordered_map<std::string, std::shared_ptr<rtc::WebSocket>> pendingClients_;
54 //std::unordered_map<std::string, std::chrono::steady_clock::time_point> pendingSince_;
55 std::unordered_map<std::string, std::string> pendingUsernames_;
56
57 // Authenticated clients (only these receive routed messages)
58 std::unordered_map<std::string, std::string> authUsernames_;
59 std::unordered_map<std::string, std::shared_ptr<rtc::WebSocket>> authClients_;
60 std::chrono::seconds pendingTimeout_{60}; // default: 60s to auth
61};
std::shared_ptr< rtc::WebSocketServer > server
void onMessage(const std::string &clientId, const std::string &text)
SignalingServer(std::weak_ptr< NetworkManager > parent)
void broadcast(const std::string &message)
bool isAuthenticated(const std::string &clientId) const
std::chrono::seconds pendingTimeout_
void disconnectClient(const std::string &clientId)
const std::unordered_map< std::string, std::shared_ptr< rtc::WebSocket > > & authClients() const
std::unordered_map< std::string, std::shared_ptr< rtc::WebSocket > > pendingClients_
void onConnect(std::string clientId, std::shared_ptr< rtc::WebSocket > client)
void setPendingAuthTimeout(std::chrono::seconds s)
void moveToAuthenticated(const std::string &clientId)
std::unordered_map< std::string, std::string > authUsernames_
void start(unsigned short port)
std::weak_ptr< NetworkManager > network_manager
std::unordered_map< std::string, std::shared_ptr< rtc::WebSocket > > authClients_
void sendTo(const std::string &clientId, const std::string &message)
bool isRunning() const
std::unordered_map< std::string, std::string > pendingUsernames_