SGCT master (487fac4)
Simple Graphics Cluster Toolkit
Loading...
Searching...
No Matches
networkmanager.h
Go to the documentation of this file.
1/*****************************************************************************************
2 * SGCT *
3 * Simple Graphics Cluster Toolkit *
4 * *
5 * Copyright (c) 2012-2026 *
6 * For conditions of distribution and use, see copyright notice in LICENSE.md *
7 ****************************************************************************************/
8
9#ifndef __SGCT__NETWORKMANAGER__H__
10#define __SGCT__NETWORKMANAGER__H__
11
12#include <sgct/sgctexports.h>
13
14#include <sgct/network.h>
15#include <condition_variable>
16#include <functional>
17#include <memory>
18#include <optional>
19#include <string>
20#include <string_view>
21#include <utility>
22#include <vector>
23
24namespace sgct {
25
26class Network;
27
31class SGCT_EXPORT NetworkManager {
32public:
33 enum class SyncMode { SendDataToClients = 0, Acknowledge };
34 enum class NetworkMode { Remote = 0, LocalServer, LocalClient };
35
36 static NetworkManager& instance();
37 static void create(NetworkMode nm,
38 std::function<void(void*, int, int, int)> dataTransferDecode,
39 std::function<void(bool, int)> dataTransferStatus,
40 std::function<void(int, int)> dataTransferAcknowledge);
41 static void destroy();
42
43 static std::condition_variable cond;
44
46
47 void initialize();
49
56 std::optional<std::pair<double, double>> sync(SyncMode sm) const;
57
62 bool isSyncComplete() const;
63
64 bool matchesAddress(std::string_view address) const;
65
69 bool isComputerServer() const;
70 bool isRunning() const;
72 void transferData(const void* data, int length, int packageId) const;
73 void transferData(const void* data, int length, int packageId,
74 const Network& connection) const;
75
76 unsigned int activeConnectionsCount() const;
77 int connectionsCount() const;
79 const Network& connection(int index) const;
80 const Network& syncConnection(int index) const;
81
82private:
83 static NetworkManager* _instance;
84
85 NetworkManager(NetworkMode nm,
86 std::function<void(void*, int, int, int)> dataTransferDecode,
87 std::function<void(bool, int)> dataTransferStatus,
88 std::function<void(int, int)> dataTransferAcknowledge);
89 NetworkManager(const NetworkManager&) = delete;
90 NetworkManager(NetworkManager&&) = delete;
91 NetworkManager& operator=(const NetworkManager&) = delete;
92 NetworkManager& operator=(NetworkManager&&) = delete;
93
94
95 void addConnection(int port, std::string address,
97 void updateConnectionStatus(Network& connection);
98 void setAllNodesConnected();
99
100 std::function<void(void*, int, int, int)> _dataTransferDecodeFn;
101 std::function<void(bool, int)> _dataTransferStatusFn;
102 std::function<void(int, int)> _dataTransferAcknowledgeFn;
103
104 // This could be a std::vector<Network>, but Network is not move-constructible
105 // because of the std::condition_variable in it
106 std::vector<std::unique_ptr<Network>> _networkConnections;
107 std::vector<Network*> _syncConnections;
108 std::vector<Network*> _dataTransferConnections;
109
110 std::vector<std::string> _localAddresses;
111
112 bool _isServer = true;
113 bool _isRunning = true;
114 bool _allNodesConnected = false;
115 const NetworkMode _mode;
116 unsigned int _nActiveConnections = 0;
117 unsigned int _nActiveSyncConnections = 0;
118 unsigned int _nActiveDataTransferConnections = 0;
119};
120
121} // namespace sgct
122
123#endif // __SGCT__NETWORKMANAGER__H__
Network manages peer-to-peer tcp connections.
Definition network.h:35
ConnectionType
Definition network.h:44
@ SyncConnection
Definition network.h:44
const Network & connection(int index) const
bool isSyncComplete() const
Compare if the last frame and current frames are different -> data update and if send frame == reciev...
std::optional< std::pair< double, double > > sync(SyncMode sm) const
const Network & syncConnection(int index) const
static std::condition_variable cond
Definition networkmanager.h:43
unsigned int activeConnectionsCount() const
static NetworkManager & instance()
NetworkMode
Definition networkmanager.h:34
SyncMode
Definition networkmanager.h:33
bool matchesAddress(std::string_view address) const
void transferData(const void *data, int length, int packageId) const
bool areAllNodesConnected() const
static void create(NetworkMode nm, std::function< void(void *, int, int, int)> dataTransferDecode, std::function< void(bool, int)> dataTransferStatus, std::function< void(int, int)> dataTransferAcknowledge)
void transferData(const void *data, int length, int packageId, const Network &connection) const
bool isComputerServer() const
Retrieve the node id if this node is part of the cluster configuration.
static void destroy()
int connectionsCount() const
bool isRunning() const
int syncConnectionsCount() const
Definition actions.h:16