SGCT
master (487fac4)
Simple Graphics Cluster Toolkit
Toggle main menu visibility
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
24
namespace
sgct
{
25
26
class
Network
;
27
31
class
SGCT_EXPORT NetworkManager {
32
public
:
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
45
~NetworkManager
();
46
47
void
initialize
();
48
void
clearCallbacks
();
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
;
71
bool
areAllNodesConnected
()
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
;
78
int
syncConnectionsCount
()
const
;
79
const
Network
&
connection
(
int
index)
const
;
80
const
Network
&
syncConnection
(
int
index)
const
;
81
82
private
:
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,
96
Network::ConnectionType
connectionType =
Network::ConnectionType::SyncConnection
);
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__
sgct::Network
Network manages peer-to-peer tcp connections.
Definition
network.h:35
sgct::Network::ConnectionType
ConnectionType
Definition
network.h:44
sgct::Network::ConnectionType::SyncConnection
@ SyncConnection
Definition
network.h:44
sgct::NetworkManager::connection
const Network & connection(int index) const
sgct::NetworkManager::isSyncComplete
bool isSyncComplete() const
Compare if the last frame and current frames are different -> data update and if send frame == reciev...
sgct::NetworkManager::sync
std::optional< std::pair< double, double > > sync(SyncMode sm) const
sgct::NetworkManager::syncConnection
const Network & syncConnection(int index) const
sgct::NetworkManager::cond
static std::condition_variable cond
Definition
networkmanager.h:43
sgct::NetworkManager::activeConnectionsCount
unsigned int activeConnectionsCount() const
sgct::NetworkManager::clearCallbacks
void clearCallbacks()
sgct::NetworkManager::instance
static NetworkManager & instance()
sgct::NetworkManager::NetworkMode
NetworkMode
Definition
networkmanager.h:34
sgct::NetworkManager::SyncMode
SyncMode
Definition
networkmanager.h:33
sgct::NetworkManager::matchesAddress
bool matchesAddress(std::string_view address) const
sgct::NetworkManager::transferData
void transferData(const void *data, int length, int packageId) const
sgct::NetworkManager::areAllNodesConnected
bool areAllNodesConnected() const
sgct::NetworkManager::~NetworkManager
~NetworkManager()
sgct::NetworkManager::create
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)
sgct::NetworkManager::transferData
void transferData(const void *data, int length, int packageId, const Network &connection) const
sgct::NetworkManager::isComputerServer
bool isComputerServer() const
Retrieve the node id if this node is part of the cluster configuration.
sgct::NetworkManager::destroy
static void destroy()
sgct::NetworkManager::connectionsCount
int connectionsCount() const
sgct::NetworkManager::initialize
void initialize()
sgct::NetworkManager::isRunning
bool isRunning() const
sgct::NetworkManager::syncConnectionsCount
int syncConnectionsCount() const
sgct
Definition
actions.h:16
network.h
sgct
networkmanager.h
Generated by
1.18.0