LeviLamina
Loading...
Searching...
No Matches
NetworkSystem.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/common/SubClientId.h"
7#include "mc/deps/core/threading/Async.h"
8#include "mc/deps/core/utility/BinaryStream.h"
9#include "mc/deps/core/utility/NonOwnerPointer.h"
10#include "mc/deps/core/utility/pub_sub/Connector.h"
11#include "mc/deps/core/utility/pub_sub/Publisher.h"
12#include "mc/network/DevConnectionQuality.h"
13#include "mc/network/NetworkEnableDisableListener.h"
14#include "mc/network/NetworkSettingOptions.h"
15#include "mc/network/PacketGroupDefinition.h"
16#include "mc/network/RakNetConnector.h"
17#include "mc/network/RakPeerHelper.h"
18#include "mc/network/TransportLayer.h"
19#include "mc/network/connection/DisconnectFailReason.h"
20#include "mc/platform/threading/Mutex.h"
21
22// auto generated forward declare list
23// clang-format off
24class AppPlatform;
27class IPacketObserver;
29class LocalConnector;
33class NetworkPeer;
36class Packet;
37class RemoteConnector;
38class Scheduler;
39class ServerLocator;
40class TaskGroup;
41class WeakEntityRef;
43namespace Bedrock::PubSub::ThreadModel { struct MultiThreaded; }
44namespace Json { class Value; }
45namespace cereal { struct ReflectionCtx; }
46// clang-format on
47
48class NetworkSystem : public ::RakNetConnector::ConnectionCallbacks,
50 public ::NetworkEnableDisableListener {
51public:
52 // NetworkSystem inner types declare
53 // clang-format off
54 struct Dependencies;
56 // clang-format on
57
58 // NetworkSystem inner types define
59 struct Dependencies {
60 public:
61 // member variables
62 // NOLINTBEGIN
63 ::ll::TypedStorage<8, 8, ::std::reference_wrapper<::Scheduler>> receiveThread;
64 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::RemoteConnector>> remoteConnector;
65 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ServerLocator>> serverLocator;
66 ::ll::TypedStorage<8, 24, ::Bedrock::NonOwnerPointer<::AppPlatform>> appPlatform;
67 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::NetworkSessionOwner>> networkSessionOwner;
68 ::ll::TypedStorage<4, 20, ::NetworkSettingOptions> networkSettingOptions;
69 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::IPacketSerializationController>> serializationController;
70 // NOLINTEND
71
72 public:
73 // member functions
74 // NOLINTBEGIN
75 MCNAPI ~Dependencies();
76 // NOLINTEND
77
78 public:
79 // destructor thunk
80 // NOLINTBEGIN
81 MCNAPI void $dtor();
82 // NOLINTEND
83 };
84
85 struct IncomingPacketQueue {
86 public:
87 // member variables
88 // NOLINTBEGIN
89 ::ll::TypedStorage<8, 8, ::NetEventCallback&> mCallbacksObj;
90 ::ll::TypedStorage<8, 80, ::Bedrock::Threading::Mutex> mMutex;
91 // NOLINTEND
92
93 public:
94 // prevent constructor by default
95 IncomingPacketQueue& operator=(IncomingPacketQueue const&);
96 IncomingPacketQueue(IncomingPacketQueue const&);
97 IncomingPacketQueue();
98 };
99
100public:
101 // member variables
102 // NOLINTBEGIN
103 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::NetworkSessionOwner>> mNetworkSessionOwner;
104 ::ll::TypedStorage<8, 80, ::std::recursive_mutex> mConnectionsMutex;
105 ::ll::TypedStorage<8, 24, ::std::vector<::std::unique_ptr<::NetworkConnection>>> mConnections;
106 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::LocalConnector>> mLocalConnector;
107 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::PacketGroupDefinition::PacketGroupBuilder>> mPacketGroupBuilder;
108 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::RemoteConnector>> mRemoteConnector;
109 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ServerLocator>> mServerLocator;
110 ::ll::TypedStorage<8, 8, uint64> mCurrentConnection;
111 ::ll::TypedStorage<8, 16, ::Bedrock::Threading::Async<void>> mReceiveTask;
112 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TaskGroup>> mReceiveTaskGroup;
113 ::ll::TypedStorage<8, 24, ::Bedrock::NonOwnerPointer<::IPacketObserver>> mPacketObserver;
114 ::ll::TypedStorage<8, 8, ::Scheduler&> mMainThread;
115 ::ll::TypedStorage<8, 32, ::std::string> mReceiveBuffer;
116 ::ll::TypedStorage<8, 32, ::std::string> mSendBuffer;
117 ::ll::TypedStorage<8, 80, ::BinaryStream> mSendStream;
118 ::ll::TypedStorage<8, 32, ::std::unique_ptr<::NetworkSystem::IncomingPacketQueue>[4]> mIncomingPackets;
119 ::ll::TypedStorage<1, 1, bool> mUseIPv6Only;
120 ::ll::TypedStorage<2, 2, ushort> mDefaultGamePort;
121 ::ll::TypedStorage<2, 2, ushort> mDefaultGamePortv6;
122 ::ll::TypedStorage<1, 1, bool> mIsLanDiscoveryEnabled;
123 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::NetworkStatistics>> mNetworkStatistics;
124 ::ll::TypedStorage<1, 1, bool> mWebsocketsEnabled;
125 ::ll::TypedStorage<4, 20, ::NetworkSettingOptions> mNetworkSettingOptions;
126 ::ll::TypedStorage<1, 1, bool> mRawRecordingEnabled;
127 ::ll::TypedStorage<8, 8, ::gsl::not_null<::std::unique_ptr<::cereal::ReflectionCtx>>> mReflectionCtx;
128 ::ll::TypedStorage<8, 8, ::gsl::not_null<::std::unique_ptr<::IPacketSerializationController>>> mPacketOverrides;
129 ::ll::TypedStorage<
130 8,
131 8,
132 ::gsl::not_null<::std::unique_ptr<
133 ::Bedrock::PubSub::
135 mSessionSummaryPublisher;
136 // NOLINTEND
137
138public:
139 // prevent constructor by default
140 NetworkSystem& operator=(NetworkSystem const&);
141 NetworkSystem(NetworkSystem const&);
142 NetworkSystem();
143
144public:
145 LLNDAPI NetworkConnection* getConnectionFromId(NetworkIdentifier const& id);
146
147public:
148 // virtual functions
149 // NOLINTBEGIN
150 virtual bool useIPv4Only() const /*override*/;
151
152 virtual bool useIPv6Only() const /*override*/;
153
154 virtual ushort getDefaultGamePort() const /*override*/;
155
156 virtual ushort getDefaultGamePortv6() const /*override*/;
157
158 virtual ~NetworkSystem() /*override*/;
159
160 virtual void _onDisable() /*override*/;
161
162 virtual void _onEnable() /*override*/;
163
164 virtual bool
165 onNewIncomingConnection(::NetworkIdentifier const& id, ::std::shared_ptr<::NetworkPeer>&& peer) /*override*/;
166
167 virtual bool
168 onNewOutgoingConnection(::NetworkIdentifier const& id, ::std::shared_ptr<::NetworkPeer>&& peer) /*override*/;
169
170 virtual void onConnectionClosed(
171 ::NetworkIdentifier const& id,
172 ::Connection::DisconnectFailReason const discoReason,
173 ::std::string const& messageFromServer,
174 ::std::string const& messageBodyOverride,
175 bool skipDisconnectMessage,
176 ::Json::Value const& sessionSummary
177 ) /*override*/;
178
179 virtual void
180 onAllConnectionsClosed(::Connection::DisconnectFailReason discoReason, bool skipDisconnectMessage) /*override*/;
181
182 virtual void onAllRemoteConnectionsClosed(
183 ::Connection::DisconnectFailReason discoReason,
184 bool skipDisconnectMessage
185 ) /*override*/;
186
187 virtual void onOutgoingConnectionFailed(::Connection::DisconnectFailReason discoReason) /*override*/;
188
189 virtual void onWebsocketRequest(
190 ::std::string const& serverAddress,
191 ::std::string const& payload,
192 ::std::function<void()> errorCallback
193 ) /*override*/;
194 // NOLINTEND
195
196public:
197 // member functions
198 // NOLINTBEGIN
199 MCAPI explicit NetworkSystem(::NetworkSystem::Dependencies&& deps);
200
201 MCAPI ::TransportLayer _getTransportLayer() const;
202
203 MCAPI void _initNetworkStatistics(::std::unique_ptr<::NetworkStatistics>&& stats);
204
205 MCAPI bool _isUsingNetherNetTransportLayer() const;
206
207 MCAPI void _sendInternal(::NetworkIdentifier const& id, ::Packet const& packet, ::std::string const& data);
208
209#ifdef LL_PLAT_C
210 MCAPI void _setDisableLanSignaling(bool disableLanSignaling);
211#endif
212
213 MCAPI bool
214 _sortAndPacketizeEvents(::NetworkConnection& connection, ::std::chrono::steady_clock::time_point endTime);
215
216#ifdef LL_PLAT_C
217 MCAPI void closeConnection(
218 ::NetworkIdentifier const& id,
219 ::Connection::DisconnectFailReason discoReason,
220 ::std::string const& messageFromServer
221 );
222#endif
223
224 MCAPI void disconnect();
225
226 MCAPI void enableAsyncFlush(::NetworkIdentifier const& id);
227
228 MCAPI ::std::weak_ptr<::CompressedNetworkPeer> getCompressedPeerForUser(::NetworkIdentifier const& id);
229
230 MCFOLD ::std::vector<::std::unique_ptr<::NetworkConnection>> const& getConnections() const;
231
232 MCAPI ::std::weak_ptr<::EncryptedNetworkPeer> getEncryptedPeerForUser(::NetworkIdentifier const& id);
233
234#ifdef LL_PLAT_S
235 MCFOLD ::NetworkStatistics const* getNetworkStatistics() const;
236#endif
237
238 MCAPI ::NetworkPeer* getPeerForUser(::NetworkIdentifier const& id);
239
240 MCFOLD ::Bedrock::NotNullNonOwnerPtr<::RemoteConnector const> getRemoteConnector() const;
241
242 MCFOLD ::Bedrock::NotNullNonOwnerPtr<::RemoteConnector> getRemoteConnector();
243
244 MCFOLD ::ServerLocator& getServerLocator();
245
246#ifdef LL_PLAT_C
247 MCAPI ::Bedrock::PubSub::Connector<void(::Json::Value const&)>& getSessionSummaryCallback();
248
249 MCAPI bool hasNetworkSession() const;
250
251 MCAPI bool isNetherNetEnabled() const;
252#endif
253
254 MCAPI bool isServer() const;
255
256#ifdef LL_PLAT_C
257 MCAPI void registerClientInstance(::NetEventCallback& callback, ::SubClientId subID);
258#endif
259
260 MCAPI void registerServerInstance(::NetEventCallback& callback);
261
262 MCAPI void runEvents(bool networkIsCritical);
263
264 MCAPI void send(::NetworkIdentifier const& id, ::Packet const& packet, ::SubClientId recipientSubId);
265
266 MCAPI void sendToMultiple(::std::vector<::NetworkIdentifierWithSubId> const& ids, ::Packet const& packet);
267
268 MCAPI void setCloseConnection(::NetworkIdentifier const& id);
269
270#ifdef LL_PLAT_C
271 MCAPI void setConnectionChannelPaused(::NetworkIdentifier const& id, uint channel, bool paused);
272
273 MCAPI void setDefaultGamePort(ushort defaultPort);
274
275 MCAPI void setDefaultGamePortv6(ushort defaultPortv6);
276
277 MCAPI void setDevConnectionQuality(::DevConnectionQuality quality);
278
279 MCAPI void setUseIPv6Only(bool useIPv6Only);
280#endif
281
282 MCAPI void unregisterClientOrServerInstance(::SubClientId const& subID);
283
284 MCAPI void update(::std::vector<::WeakEntityRef> const* userList);
285 // NOLINTEND
286
287public:
288 // constructor thunks
289 // NOLINTBEGIN
290 MCAPI void* $ctor(::NetworkSystem::Dependencies&& deps);
291 // NOLINTEND
292
293public:
294 // destructor thunk
295 // NOLINTBEGIN
296 MCAPI void $dtor();
297 // NOLINTEND
298
299public:
300 // virtual function thunks
301 // NOLINTBEGIN
302 MCFOLD bool $useIPv4Only() const;
303
304 MCAPI bool $useIPv6Only() const;
305
306 MCAPI ushort $getDefaultGamePort() const;
307
308 MCAPI ushort $getDefaultGamePortv6() const;
309
310 MCAPI void $_onDisable();
311
312 MCAPI void $_onEnable();
313
314 MCAPI bool $onNewIncomingConnection(::NetworkIdentifier const& id, ::std::shared_ptr<::NetworkPeer>&& peer);
315
316 MCAPI bool $onNewOutgoingConnection(::NetworkIdentifier const& id, ::std::shared_ptr<::NetworkPeer>&& peer);
317
318 MCAPI void $onConnectionClosed(
319 ::NetworkIdentifier const& id,
320 ::Connection::DisconnectFailReason const discoReason,
321 ::std::string const& messageFromServer,
322 ::std::string const& messageBodyOverride,
323 bool skipDisconnectMessage,
324 ::Json::Value const& sessionSummary
325 );
326
327 MCAPI void $onAllConnectionsClosed(::Connection::DisconnectFailReason discoReason, bool skipDisconnectMessage);
328
329 MCAPI void
330 $onAllRemoteConnectionsClosed(::Connection::DisconnectFailReason discoReason, bool skipDisconnectMessage);
331
332 MCAPI void $onOutgoingConnectionFailed(::Connection::DisconnectFailReason discoReason);
333
334 MCAPI void $onWebsocketRequest(
335 ::std::string const& serverAddress,
336 ::std::string const& payload,
337 ::std::function<void()> errorCallback
338 );
339
340
341 // NOLINTEND
342
343public:
344 // vftables
345 // NOLINTBEGIN
346 MCNAPI static void** $vftableForConnectionCallbacks();
347
348 MCNAPI static void** $vftableForIPSupportInterface();
349
351 // NOLINTEND
352};
Definition AppPlatform.h:91
Definition CompressedNetworkPeer.h:11
Definition EncryptedNetworkPeer.h:15
Definition IPacketObserver.h:14
Definition IPacketSerializationController.h:9
Definition Value.h:16
Definition LocalConnector.h:18
Definition NetEventCallback.h:260
Definition NetworkConnection.h:30
Definition NetworkIdentifier.h:10
Definition NetworkPeer.h:8
Definition NetworkSessionOwner.h:9
Definition NetworkStatistics.h:23
static MCAPI void ** $vftableForIPSupportInterface()
static MCAPI void ** $vftableForNetworkEnableDisableListener()
static MCAPI void ** $vftableForConnectionCallbacks()
Definition Packet.h:30
Definition RakPeerHelper.h:35
Definition RemoteConnector.h:19
Definition Scheduler.h:15
Definition ServerLocator.h:19
Definition TaskGroup.h:55
Definition WeakEntityRef.h:14
STL namespace.
Definition NetworkIdentifierWithSubId.h:10
Definition NetworkSystem.h:59
Definition NetworkSystem.h:85
Definition RakNetConnector.h:39
Definition ReflectionCtx.h:11