SGCT
master (487fac4)
Simple Graphics Cluster Toolkit
Toggle main menu visibility
Loading...
Searching...
No Matches
network.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__NETWORK__H__
10
#define __SGCT__NETWORK__H__
11
12
#include <sgct/sgctexports.h>
13
14
#include <atomic>
15
#include <condition_variable>
16
#include <cstdint>
17
#include <functional>
18
#include <memory>
19
#include <mutex>
20
#include <string>
21
#include <thread>
22
#include <vector>
23
24
#ifdef WIN32
25
using
SGCT_SOCKET
= size_t;
26
#else
// ^^^^ WIN32 // !WIN32 vvvv
27
using
SGCT_SOCKET
= int;
28
#endif
// WIN32
29
30
namespace
sgct
{
31
35
class
SGCT_EXPORT
Network
{
36
public
:
37
// ASCII device control chars = 17, 18, 19 & 20
38
static
constexpr
char
DefaultId
= 0;
39
static
constexpr
char
Ack
= 6;
40
static
constexpr
char
DataId
= 17;
41
static
constexpr
char
ConnectedId
= 18;
42
static
constexpr
char
DisconnectId
= 19;
43
44
enum class
ConnectionType
{ SyncConnection, DataTransfer };
45
46
static
constexpr
size_t
HeaderSize
= 13;
47
51
static
int
lastError
();
52
59
Network
(
int
port
,
const
std::string& address,
bool
isServer
,
ConnectionType
t);
60
~Network
();
61
62
void
initialize
();
63
void
closeNetwork
(
bool
forced);
64
void
initShutdown
();
65
66
void
setDecodeFunction
(std::function<
void
(
const
char
*,
int
)> fn);
67
void
setPackageDecodeFunction
(std::function<
void
(
void
*,
int
,
int
,
int
)> fn);
68
void
setUpdateFunction
(std::function<
void
(
Network
&)> fn);
69
void
setConnectedFunction
(std::function<
void
(
void
)> fn);
70
void
setAcknowledgeFunction
(std::function<
void
(
int
,
int
)> fn);
71
72
void
setConnectedStatus
(
bool
state);
73
void
closeSocket
(
SGCT_SOCKET
lSocket);
74
75
ConnectionType
type
()
const
;
76
int
id
()
const
;
77
bool
isServer
()
const
;
78
bool
isConnected
()
const
;
79
80
int
sendFrameCurrent
()
const
;
81
int
recvFrameCurrent
()
const
;
82
int
recvFramePrevious
()
const
;
83
87
double
loopTime
()
const
;
88
97
bool
isUpdated
()
const
;
98
void
sendData
(
const
void
* data,
int
length)
const
;
99
103
int
iterateFrameCounter
();
104
108
void
pushClientMessage
();
109
113
int
port
()
const
;
114
115
std::condition_variable&
startConnectionConditionVar
();
116
117
private
:
118
Network
(
const
Network
&) =
delete
;
119
Network
(
Network
&&) =
delete
;
120
Network
& operator=(
const
Network
&) =
delete
;
121
Network
& operator=(
Network
&&) =
delete
;
122
123
void
setRecvFrame(
int
i);
124
void
updateBuffer(std::vector<char>& buffer, uint32_t reqSize, uint32_t& currSize);
125
int
readSyncMessage(
char
* header, int32_t& syncFrame, uint32_t& dataSize,
126
uint32_t& uncompressedDataSize);
127
int
readDataTransferMessage(
char
* header, int32_t& packageId, uint32_t& dataSize,
128
uint32_t& uncompressedDataSize);
129
int
readExternalMessage();
130
131
void
communicationHandler();
132
void
connectionHandler();
133
134
SGCT_SOCKET
_socket;
135
SGCT_SOCKET
_listenSocket;
136
137
const
ConnectionType
_connectionType =
ConnectionType::SyncConnection
;
138
std::atomic_bool _isServer;
139
std::atomic_bool _isConnected =
false
;
140
std::atomic_bool _isUpdated =
false
;
141
std::atomic<int32_t> _currentSendFrame = 0;
142
std::atomic<int32_t> _previousSendFrame = 0;
143
std::atomic<int32_t> _currentRecvFrame = 0;
144
std::atomic<int32_t> _previousRecvFrame = -1;
145
std::atomic_bool _shouldTerminate =
false
;
// set to true upon exit
146
147
mutable
std::mutex _connectionMutex;
148
std::unique_ptr<std::thread> _commThread;
149
std::unique_ptr<std::thread> _mainThread;
150
151
double
_timeStampSend = 0.0;
152
std::atomic<double> _timeStampTotal = 0.0;
153
int
_id;
154
uint32_t _bufferSize = 1024;
155
uint32_t _uncompressedBufferSize = _bufferSize;
156
std::atomic<uint32_t> _requestedSize = _bufferSize;
157
const
int
_port = -1;
158
159
std::vector<char> _recvBuffer;
160
std::vector<char> _uncompressBuffer;
161
char
_headerId = 0;
162
163
std::condition_variable _startConnectionCond;
164
165
std::function<void(
const
char
*,
int
)> decoderCallback;
166
std::function<void(
void
*,
int
,
int
,
int
)> _packageDecoderCallback;
167
std::function<void(
Network
&)> _updateCallback;
168
std::function<void(
void
)> _connectedCallback;
169
std::function<void(
int
,
int
)> _acknowledgeCallback;
170
};
171
172
}
// namespace sgct
173
174
#endif
// __SGCT__NETWORK__H__
sgct::Network::startConnectionConditionVar
std::condition_variable & startConnectionConditionVar()
sgct::Network::isConnected
bool isConnected() const
sgct::Network::DisconnectId
static constexpr char DisconnectId
Definition
network.h:42
sgct::Network::initShutdown
void initShutdown()
sgct::Network::setDecodeFunction
void setDecodeFunction(std::function< void(const char *, int)> fn)
sgct::Network::closeNetwork
void closeNetwork(bool forced)
sgct::Network::pushClientMessage
void pushClientMessage()
The client sends ack message to server + console messages.
sgct::Network::sendFrameCurrent
int sendFrameCurrent() const
sgct::Network::setAcknowledgeFunction
void setAcknowledgeFunction(std::function< void(int, int)> fn)
sgct::Network::Ack
static constexpr char Ack
Definition
network.h:39
sgct::Network::type
ConnectionType type() const
sgct::Network::setConnectedFunction
void setConnectedFunction(std::function< void(void)> fn)
sgct::Network::isUpdated
bool isUpdated() const
This function compares the received frame number with the sent frame number.
sgct::Network::recvFramePrevious
int recvFramePrevious() const
sgct::Network::initialize
void initialize()
sgct::Network::recvFrameCurrent
int recvFrameCurrent() const
sgct::Network::loopTime
double loopTime() const
Get the time in seconds from send to receive of sync data.
sgct::Network::Network
Network(int port, const std::string &address, bool isServer, ConnectionType t)
sgct::Network::id
int id() const
sgct::Network::HeaderSize
static constexpr size_t HeaderSize
Definition
network.h:46
sgct::Network::ConnectedId
static constexpr char ConnectedId
Definition
network.h:41
sgct::Network::lastError
static int lastError()
sgct::Network::isServer
bool isServer() const
sgct::Network::setConnectedStatus
void setConnectedStatus(bool state)
sgct::Network::ConnectionType
ConnectionType
Definition
network.h:44
sgct::Network::ConnectionType::SyncConnection
@ SyncConnection
Definition
network.h:44
sgct::Network::port
int port() const
sgct::Network::setUpdateFunction
void setUpdateFunction(std::function< void(Network &)> fn)
sgct::Network::~Network
~Network()
sgct::Network::iterateFrameCounter
int iterateFrameCounter()
Iterates the send frame number and returns the new frame number.
sgct::Network::setPackageDecodeFunction
void setPackageDecodeFunction(std::function< void(void *, int, int, int)> fn)
sgct::Network::DefaultId
static constexpr char DefaultId
Definition
network.h:38
sgct::Network::sendData
void sendData(const void *data, int length) const
sgct::Network::DataId
static constexpr char DataId
Definition
network.h:40
sgct::Network::closeSocket
void closeSocket(SGCT_SOCKET lSocket)
sgct
Definition
actions.h:16
SGCT_SOCKET
int SGCT_SOCKET
Definition
network.h:27
sgct
network.h
Generated by
1.18.0