group2 0.1.0
CSE 125 Group 2
Loading...
Searching...
No Matches
GlobalDiscoveryProtocol.hpp
Go to the documentation of this file.
1
3
4#pragma once
5
7
8#include <cstddef>
9#include <cstdint>
10#include <optional>
11#include <string>
12#include <vector>
13
14namespace net::discovery
15{
16
17inline constexpr std::uint16_t k_defaultDirectoryTcpPort = 10080;
18inline constexpr std::uint16_t k_defaultDirectoryUdpPort = 10081;
19inline constexpr std::uint64_t k_serverTtlMs = 15000;
20
32
33enum class DirectoryUdpMessage : std::uint8_t
34{
35 Hello = 1,
38};
39
40enum class UdpRole : std::uint8_t
41{
42 Server = 1,
43 Client = 2,
44};
45
47{
48 std::uint32_t id = 0;
49 std::string name;
50 std::string host;
51 std::uint16_t gamePort = 0;
52 std::string udpHost;
53 std::uint16_t udpPort = 0;
54 std::uint8_t currentPlayers = 0;
55 std::uint8_t maxPlayers = 0;
56 std::uint64_t lastSeenMs = 0;
57 bool natTraversalReady = false;
58};
59
61{
62 std::uint32_t serverId = 0;
63 std::string name;
64 std::uint16_t gamePort = 0;
65 std::uint8_t currentPlayers = 0;
66 std::uint8_t maxPlayers = 0;
67};
68
70{
71 bool accepted = false;
72 std::uint32_t serverId = 0;
73 std::string publicHost;
74 std::string message;
75};
76
78{
79 std::uint32_t serverId = 0;
80 std::uint32_t clientNonce = 0;
81};
82
90
92{
94 std::uint32_t idOrNonce = 0;
95 std::uint16_t gamePort = 0;
96};
97
99{
100 std::uint32_t clientNonce = 0;
101 std::string host;
102 std::uint16_t port = 0;
103};
104
105std::vector<std::uint8_t> makeEnvelope(DirectoryMessage kind, const std::vector<std::uint8_t>& payload = {});
106bool parseEnvelope(
107 const void* data, std::size_t len, DirectoryMessage& kind, const std::uint8_t*& payload, std::size_t& payloadLen);
108
109std::vector<std::uint8_t> encodeRegistration(DirectoryMessage kind, const ServerRegistration& reg);
110std::optional<ServerRegistration> decodeRegistration(const std::uint8_t* data, std::size_t len);
111
112std::vector<std::uint8_t> encodeRegisterAck(const RegisterAck& ack);
113std::optional<RegisterAck> decodeRegisterAck(const std::uint8_t* data, std::size_t len);
114
115std::vector<std::uint8_t> encodeServerList(const std::vector<ServerInfo>& servers);
116std::optional<std::vector<ServerInfo>> decodeServerList(const std::uint8_t* data, std::size_t len);
117
118std::vector<std::uint8_t> encodePunchRequest(const PunchRequest& req);
119std::optional<PunchRequest> decodePunchRequest(const std::uint8_t* data, std::size_t len);
120
121std::vector<std::uint8_t> encodePunchResponse(const PunchResponse& resp);
122std::optional<PunchResponse> decodePunchResponse(const std::uint8_t* data, std::size_t len);
123
124std::vector<std::uint8_t> encodeUdpHello(const UdpHello& hello);
125std::optional<UdpHello> decodeUdpHello(const std::uint8_t* data, std::size_t len);
126
127std::vector<std::uint8_t> encodeUdpPunchPeer(const UdpPunchPeer& peer);
128std::optional<UdpPunchPeer> decodeUdpPunchPeer(const std::uint8_t* data, std::size_t len);
129
130std::uint32_t randomNonce();
131
132} // namespace net::discovery
Opaque relay authorization token shared by discovery and transport.
TCP stream client — sends input to the server and receives state updates.
Definition Client.hpp:65
TCP stream socket — receives client packets and echoes them back.
Definition Server.hpp:40
Definition GlobalDiscoveryProtocol.cpp:11
std::optional< RegisterAck > decodeRegisterAck(const std::uint8_t *data, std::size_t len)
Definition GlobalDiscoveryProtocol.cpp:159
DirectoryUdpMessage
Definition GlobalDiscoveryProtocol.hpp:34
@ PunchProbe
Definition GlobalDiscoveryProtocol.hpp:37
@ Hello
Definition GlobalDiscoveryProtocol.hpp:35
std::optional< ServerRegistration > decodeRegistration(const std::uint8_t *data, std::size_t len)
Definition GlobalDiscoveryProtocol.cpp:137
std::optional< std::vector< ServerInfo > > decodeServerList(const std::uint8_t *data, std::size_t len)
Definition GlobalDiscoveryProtocol.cpp:182
std::vector< std::uint8_t > encodeUdpHello(const UdpHello &hello)
Definition GlobalDiscoveryProtocol.cpp:251
std::optional< PunchResponse > decodePunchResponse(const std::uint8_t *data, std::size_t len)
Definition GlobalDiscoveryProtocol.cpp:233
std::uint32_t randomNonce()
Definition GlobalDiscoveryProtocol.cpp:300
std::vector< std::uint8_t > encodeServerList(const std::vector< ServerInfo > &servers)
Definition GlobalDiscoveryProtocol.cpp:173
bool parseEnvelope(const void *data, std::size_t len, DirectoryMessage &kind, const std::uint8_t *&payload, std::size_t &payloadLen)
Definition GlobalDiscoveryProtocol.cpp:105
std::vector< std::uint8_t > encodeRegisterAck(const RegisterAck &ack)
Definition GlobalDiscoveryProtocol.cpp:149
std::vector< std::uint8_t > encodeRegistration(DirectoryMessage kind, const ServerRegistration &reg)
Definition GlobalDiscoveryProtocol.cpp:126
DirectoryMessage
Definition GlobalDiscoveryProtocol.hpp:22
@ RegisterServer
Definition GlobalDiscoveryProtocol.hpp:23
@ ListResponse
Definition GlobalDiscoveryProtocol.hpp:27
@ ListRequest
Definition GlobalDiscoveryProtocol.hpp:26
@ Heartbeat
Definition GlobalDiscoveryProtocol.hpp:25
@ PunchPeer
Definition GlobalDiscoveryProtocol.hpp:30
@ PunchRequest
Definition GlobalDiscoveryProtocol.hpp:28
@ PunchResponse
Definition GlobalDiscoveryProtocol.hpp:29
@ RegisterAck
Definition GlobalDiscoveryProtocol.hpp:24
std::optional< PunchRequest > decodePunchRequest(const std::uint8_t *data, std::size_t len)
Definition GlobalDiscoveryProtocol.cpp:213
std::vector< std::uint8_t > encodePunchRequest(const PunchRequest &req)
Definition GlobalDiscoveryProtocol.cpp:205
std::vector< std::uint8_t > makeEnvelope(DirectoryMessage kind, const std::vector< std::uint8_t > &payload)
Definition GlobalDiscoveryProtocol.cpp:94
std::vector< std::uint8_t > encodePunchResponse(const PunchResponse &resp)
Definition GlobalDiscoveryProtocol.cpp:222
constexpr std::uint16_t k_defaultDirectoryUdpPort
Definition GlobalDiscoveryProtocol.hpp:18
constexpr std::uint16_t k_defaultDirectoryTcpPort
Definition GlobalDiscoveryProtocol.hpp:17
UdpRole
Definition GlobalDiscoveryProtocol.hpp:41
@ Client
Definition GlobalDiscoveryProtocol.hpp:43
constexpr std::uint64_t k_serverTtlMs
Definition GlobalDiscoveryProtocol.hpp:19
std::vector< std::uint8_t > encodeUdpPunchPeer(const UdpPunchPeer &peer)
Definition GlobalDiscoveryProtocol.cpp:276
std::optional< UdpHello > decodeUdpHello(const std::uint8_t *data, std::size_t len)
Definition GlobalDiscoveryProtocol.cpp:261
std::optional< UdpPunchPeer > decodeUdpPunchPeer(const std::uint8_t *data, std::size_t len)
Definition GlobalDiscoveryProtocol.cpp:286
Definition RelayToken.hpp:16
Definition GlobalDiscoveryProtocol.hpp:78
std::uint32_t clientNonce
Definition GlobalDiscoveryProtocol.hpp:80
std::uint32_t serverId
Definition GlobalDiscoveryProtocol.hpp:79
Definition GlobalDiscoveryProtocol.hpp:84
bool accepted
Definition GlobalDiscoveryProtocol.hpp:85
net::RelayToken relayToken
Definition GlobalDiscoveryProtocol.hpp:87
std::string message
Definition GlobalDiscoveryProtocol.hpp:88
ServerInfo server
Definition GlobalDiscoveryProtocol.hpp:86
Definition GlobalDiscoveryProtocol.hpp:70
bool accepted
Definition GlobalDiscoveryProtocol.hpp:71
std::uint32_t serverId
Definition GlobalDiscoveryProtocol.hpp:72
std::string publicHost
Definition GlobalDiscoveryProtocol.hpp:73
std::string message
Definition GlobalDiscoveryProtocol.hpp:74
Definition GlobalDiscoveryProtocol.hpp:47
std::uint16_t gamePort
Definition GlobalDiscoveryProtocol.hpp:51
std::uint16_t udpPort
Definition GlobalDiscoveryProtocol.hpp:53
std::uint8_t currentPlayers
Definition GlobalDiscoveryProtocol.hpp:54
std::uint8_t maxPlayers
Definition GlobalDiscoveryProtocol.hpp:55
std::string udpHost
Definition GlobalDiscoveryProtocol.hpp:52
std::string host
Definition GlobalDiscoveryProtocol.hpp:50
std::uint64_t lastSeenMs
Definition GlobalDiscoveryProtocol.hpp:56
std::string name
Definition GlobalDiscoveryProtocol.hpp:49
bool natTraversalReady
Definition GlobalDiscoveryProtocol.hpp:57
Definition GlobalDiscoveryProtocol.hpp:61
std::uint16_t gamePort
Definition GlobalDiscoveryProtocol.hpp:64
std::uint8_t maxPlayers
Definition GlobalDiscoveryProtocol.hpp:66
std::uint32_t serverId
Definition GlobalDiscoveryProtocol.hpp:62
std::string name
Definition GlobalDiscoveryProtocol.hpp:63
std::uint8_t currentPlayers
Definition GlobalDiscoveryProtocol.hpp:65
Definition GlobalDiscoveryProtocol.hpp:92
std::uint16_t gamePort
Definition GlobalDiscoveryProtocol.hpp:95
UdpRole role
Definition GlobalDiscoveryProtocol.hpp:93
std::uint32_t idOrNonce
Definition GlobalDiscoveryProtocol.hpp:94
Definition GlobalDiscoveryProtocol.hpp:99
std::string host
Definition GlobalDiscoveryProtocol.hpp:101
std::uint16_t port
Definition GlobalDiscoveryProtocol.hpp:102
std::uint32_t clientNonce
Definition GlobalDiscoveryProtocol.hpp:100