203 enum class LoginState : uchar {
204 AwaitingHandshake = 0,
205 AwaitingPlayerSpawn = 1,
212 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ConnectionRequest>> mPrimaryRequest;
213 ::ll::TypedStorage<8, 384, ::PlayerAuthenticationInfo> mPrimaryPlayerInfo;
214 ::ll::TypedStorage<8, 32, ::std::string> mClientInfoPartyId;
215 ::ll::TypedStorage<8, 64, ::std::unordered_map<::SubClientId, ::PlayerAuthenticationInfo>> mSubClientPlayerInfo;
216 ::ll::TypedStorage<1, 1, ::ServerNetworkHandler::Client::LoginState> mLoginState;
244 ::ll::TypedStorage<8, 248, ::ClientBlobCache::Server::TransferBuilder> mTransferBuilder;
254 ::std::unordered_map<::NetworkIdentifier, ::std::unique_ptr<::ServerNetworkHandler::Client>>>
256 ::ll::TypedStorage<8, 8, ::GameCallbacks&> mGameCallbacks;
257 ::ll::TypedStorage<8, 24, ::Bedrock::NonOwnerPointer<::ILevel>> mLevel;
258 ::ll::TypedStorage<8, 24, ::ServerPlayerLoader> mPlayerLoader;
259 ::ll::TypedStorage<8, 8, ::ServerNetworkSystem&> mNetwork;
260 ::ll::TypedStorage<8, 8, ::PrivateKeyManager&> mServerKeys;
261 ::ll::TypedStorage<8, 8, ::gsl::not_null<::std::unique_ptr<::ServerAudioContentRegistrationHandler>>>
262 mAudioContentRegistrationHandler;
263 ::ll::TypedStorage<8, 8, ::ServerLocator&> mServerLocator;
264 ::ll::TypedStorage<8, 8, ::gsl::not_null<::PacketSender*>> mPacketSender;
265 ::ll::TypedStorage<8, 8, ::AllowList&> mAllowList;
266 ::ll::TypedStorage<8, 8, ::EditorAllowList&> mEditorAllowList;
267 ::ll::TypedStorage<8, 8, ::PermissionsFile*> mPermissionsFile;
268 ::ll::TypedStorage<8, 104, ::DenyList> mServerDenyList;
269 ::ll::TypedStorage<8, 72, ::NetworkServerConfig> mNetworkServerConfig;
270 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::ScriptPackSettingsCache>> mPackSettingsCache;
271 ::ll::TypedStorage<1, 1, bool> mHasDisplayedPackErrors;
272 ::ll::TypedStorage<8, 176, ::NetworkIdentifier> mMyId;
273 ::ll::TypedStorage<4, 4, int const> mMaxChunkRadius;
274 ::ll::TypedStorage<8, 8, ::MinecraftCommands&> mMinecraftCommands;
275 ::ll::TypedStorage<8, 8, ::IMinecraftApp&> mApp;
276 ::ll::TypedStorage<8, 24, ::Bedrock::NonOwnerPointer<::TextFilteringProcessor>> mTextFilteringProcessor;
277 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ClientBlobCache::Server::ActiveTransfersManager>> mClientCacheManager;
278 ::ll::TypedStorage<8, 64, ::std::unordered_map<::NetworkIdentifierWithSubId, ::Json::Value>>
279 mServerStorageForClientsConnectingAttempt;
280 ::ll::TypedStorage<8, 64, ::std::unordered_map<::std::string, ::Social::Nonce>> mPlayerNonces;
281 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ClassroomModeNetworkHandler>> mCompanionHandler;
282 ::ll::TypedStorage<8, 80, ::std::mutex> mValidatePlayerMutex;
283 ::ll::TypedStorage<1, 1, bool> mAllowIncoming;
284 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::IServerNetworkController>> mServerNetworkController;
285 ::ll::TypedStorage<8, 32, ::std::string> mServerName;
286 ::ll::TypedStorage<4, 4, int> mMaxNumPlayers;
287 ::ll::TypedStorage<8, 64, ::std::unordered_set<::mce::UUID>> mKnownEmotePieceIdLookup;
288 ::ll::TypedStorage<8, 24, ::std::vector<::mce::UUID>> mKnownEmotePieceIds;
292 ::std::unordered_map<
294 ::std::unordered_map<::std::string, ::std::shared_ptr<::ResourcePackFileUploadManager>>>>
295 mResourceUploadManagers;
296 ::ll::TypedStorage<8, 16, ::gsl::not_null<::std::shared_ptr<::Bedrock::Threading::SharedAsync<void>>>>
299 TypedStorage<8, 8, ::gsl::not_null<::std::unique_ptr<::ResourcePackPathLifetimeHelpers::ResourcePackPathCache>>>
300 mResourcePackPathCache;
301 ::ll::TypedStorage<8, 8, ::gsl::not_null<::std::unique_ptr<::ServerConnectionAuthValidator>>>
302 mConnectionAuthValidator;
303 ::ll::TypedStorage<8, 8, ::gsl::not_null<::std::unique_ptr<::TaskGroup>>> mNetworkTaskGroup;
304 ::ll::TypedStorage<8, 8, ::gsl::not_null<::std::unique_ptr<::AsyncJoinTaskManager>>> mAsyncJoinTaskManager;
305 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TaskGroup>> mIOTaskGroup;
306 ::ll::TypedStorage<1, 1, bool> mIsTrial;
307 ::ll::TypedStorage<8, 64, ::std::unordered_map<::PackIdVersion, ::std::string>> mPackIdToContentKey;
308 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::GameSpecificNetEventCallback>> mGameSpecificNetEventCallback;
312 ::std::unordered_map<::NetworkIdentifier, ::std::unique_ptr<::ServerNetworkHandler::TransferBuilderBatcher>>>
313 mTransferBuilderBatcher;
314 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::GameTestNetworkAdapter>> mGameTestAdapter;
315 ::ll::TypedStorage<8, 40, ::ServiceReference<::AppConfigs>> mAppConfigs;
316 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::BiomeDefinitionListPacket const>> mBiomeDefinitionListWithoutCSCG;
317 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::BiomeDefinitionListPacket const>> mBiomeDefinitionListWithCSCG;
318 ::ll::TypedStorage<8, 24, ::Bedrock::NonOwnerPointer<::IEduSystems>> mEduSystems;
319 ::ll::TypedStorage<8, 384, ::std::optional<::ServerConfiguration::ServerConfigurationJoinInfo>>
320 mServerConfigurationJoinInfo;
321 ::ll::TypedStorage<8, 128, ::Social::Events::ServerTelemetryData> mServerTelemetryData;
322 ::ll::TypedStorage<8, 256, ::ServerNetworkHandlerDependencies const> mDependencies;
327 mOnPlayerDisconnected;
333 mOnPlayerNetworkDisconnected;
341 mOnPlayerNetworkConnected;
346 ServerNetworkHandler& operator=(ServerNetworkHandler
const&);
347 ServerNetworkHandler(ServerNetworkHandler
const&);
348 ServerNetworkHandler();
353 virtual ~ServerNetworkHandler() =
default;
355 virtual void onValidPacketReceived(
357 ::MinecraftPacketIds packetId,
358 ::SubClientId senderSubId,
362 virtual void onWebsocketRequest(
363 ::std::string
const& serverAddress,
364 ::std::string
const& payload,
365 ::std::function<
void()> errorCallback
369 getOnPlayerNetworkDisconnectedConnector() ;
371 virtual ::Bedrock::PubSub::Connector<
373 getOnPlayerNetworkConnectedConnector() ;
375 virtual void onInvalidPlayerJoinedLobby(
::mce::UUID const& uuid, ::std::string
const& xuid) ;
381 virtual void onXboxUserBlocked(::std::string
const& xuid) ;
383 virtual void onXboxUserUnblocked(::std::string
const& xuid) ;
385 virtual void onPlayerReady(
::Player& player) ;
387 virtual void handlePacketViolation(
388 ::std::shared_ptr<::IPacketSecurityController>
const& packetSecurityController,
389 ::std::error_code
const& errorCode,
390 ::PacketViolationResponse
const response,
391 ::MinecraftPacketIds
const packetId,
394 ::SubClientId
const clientSubId,
395 ::SubClientId
const senderSubId,
396 uint
const packetSize
399 virtual void sendPacketViolationWarningPacket(
400 ::std::error_code
const& errorCode,
401 ::PacketViolationResponse violationResponse,
402 ::MinecraftPacketIds violatingPacketId,
405 ::SubClientId clientSubId
408 virtual void sendServerLegacyParticle(::ParticleType name,
::Vec3 const& pos,
::Vec3 const&,
int data) ;
413 virtual void onDisconnect(
415 ::Connection::DisconnectFailReason
const discoReason,
416 ::Connection::DisconnectionStage
const disconnectStage,
417 ::std::string
const& messageFromServer,
418 ::std::string
const& messageBodyOverride,
420 ::std::string
const& telemetryOverride
423 virtual ::IncomingPacketFilterResult allowIncomingPacketId(
425 ::MinecraftPacketIds packetId,
429 virtual ::OutgoingPacketFilterResult
430 allowOutgoingPacket(::std::vector<::NetworkIdentifierWithSubId>
const& ids,
::Packet const& packet) ;
439 handle(
::NetworkIdentifier const& source, ::std::shared_ptr<::BlockActorDataPacket> packet) ;
484 handle(
::NetworkIdentifier const& source, ::std::shared_ptr<::InventoryTransactionPacket> packet) ;
492 virtual void handle(
::NetworkIdentifier const& source, ::std::shared_ptr<::LoginPacket> packet) ;
500 virtual void handle(
::NetworkIdentifier const& source, ::std::shared_ptr<::MobEquipmentPacket> packet) ;
528 ::std::shared_ptr<::ServerboundRegisterAudioContentPacket> packet
567 handle(
::NetworkIdentifier const& source, ::std::shared_ptr<::SubClientLoginPacket> packet) ;
618 virtual void sendSubClientLoginMessageLocal(
625 virtual void onTick() ;
627 virtual ::GameSpecificNetEventCallback* getGameSpecificNetEventCallback() ;
633 virtual ::std::optional<::PlayerAuthenticationInfo>
636 virtual void _onClientAsyncAuthorized(
640 ::std::optional<::MessToken>
const& hostMessToken
643 virtual ::ServerPlayer* _getServerPlayer(
::NetworkIdentifier const& source, ::SubClientId subId);
649 MCAPI ServerNetworkHandler(
652 ::std::optional<::ServerConfiguration::ServerConfigurationJoinInfo>
const& serverJoinInfo,
656 ::Bedrock::NotNullNonOwnerPtr<::MinecraftServiceKeyManager> minecraftServiceKeys,
667 ::std::unordered_map<::PackIdVersion, ::std::string>
const& packIdToContentKey,
673 ::std::shared_ptr<::ScriptPackSettingsCache> packSettingsCache,
679 MCAPI
int _getActiveAndInProgressPlayerCount(
::mce::UUID excludePlayer)
const;
681 MCAPI ::std::optional<::MessToken> _getJoinerMessToken(::std::string
const& eduTokenChain);
683 MCAPI ::ResourcePackFileUploadManager&
684 _getResourcePackFileUploadManager(
::NetworkIdentifier const& source, ::std::string
const& resourceName);
688 ::std::reference_wrapper<::ConnectionRequest const>,
689 ::std::reference_wrapper<::SubClientConnectionRequest const>>
const& connectionRequest,
692 ::SubClientId subClientId,
693 ::std::optional<::MessToken> messToken,
694 ::nonstd::expected<::AsyncJoinAllow, ::AsyncJoinDeny> finalVerdict
697 MCAPI
bool _isPrimaryOrSecondaryPlayerInServer(
::mce::UUID const& playerId)
const;
701 MCAPI
void _onPlayerLeft(
::ServerPlayer* player,
bool skipMessage);
703 MCAPI
void _onSubClientAuthenticated(
705 ::std::shared_ptr<::SubClientLoginPacket> packet,
709 MCAPI
void _processValidatedLoginPacket(
711 ::std::shared_ptr<::LoginPacket> packet,
713 ::std::optional<::MessToken>
const& hostMessToken
720 MCAPI
bool _updatePermissions(
728 MCAPI ::ServerPlayer*
729 _validatePrimaryPlayerForSubClient(
::NetworkIdentifier const& source, ::SubClientId subClientId);
731 MCAPI
void addToDenyList(
::mce::UUID const& uuid, ::std::string
const& xuid);
733 MCAPI
void allowIncomingConnections(::std::string
const& serverName,
bool shouldAnnounce);
735 MCAPI ::OwnerPtr<::EntityContext> createNewPlayer(
741 MCAPI ::OwnerPtr<::EntityContext> createSimulatedPlayer(
742 ::std::string
const& name,
743 ::std::string
const& xuid,
744 ::std::optional<::ActorUniqueID> idOverride
747 MCAPI
void disconnectClient(
749 ::SubClientId
const subId,
750 ::Connection::DisconnectFailReason
const disconnectReason
753 MCAPI
void disconnectClientWithMessage(
756 ::Connection::DisconnectFailReason discoReason,
757 ::std::string
const& message,
758 ::std::optional<::std::string> filteredMessage
762 disconnectPrimaryClient(
::NetworkIdentifier const&
id, ::Connection::DisconnectFailReason disconnectReason);
767 MCAPI
void engineDownloadingFinishedResponseHelper(
772 MCAPI
void engineDownloadingResponseHelper(
777 MCAPI ::PlayerAuthenticationInfo fetchPlayerAuthenticationInfo(
::NetworkIdentifier const& source);
780 MCNAPI ::std::string getServerName()
const;
785 MCAPI
void onStartShutdown();
787 MCAPI
void removeFromDenyList(
::mce::UUID const& uuid, ::std::string
const& xuid);
789 MCAPI
void sendLoginMessageLocal(
803 MCAPI
bool tryToLoadPlayer(
809 MCAPI
void updateServerAnnouncement();
817 MCAPI
static bool _isServerTextEnabled(::ServerTextEvent
const& textEvent);
819 MCAPI
static void _updateCommandBlock(
832 ::std::optional<::ServerConfiguration::ServerConfigurationJoinInfo>
const& serverJoinInfo,
836 ::Bedrock::NotNullNonOwnerPtr<::MinecraftServiceKeyManager> minecraftServiceKeys,
847 ::std::unordered_map<::PackIdVersion, ::std::string>
const& packIdToContentKey,
853 ::std::shared_ptr<::ScriptPackSettingsCache> packSettingsCache,
861 MCAPI
void $onValidPacketReceived(
863 ::MinecraftPacketIds packetId,
864 ::SubClientId senderSubId,
868 MCAPI
void $onWebsocketRequest(
869 ::std::string
const& serverAddress,
870 ::std::string
const& payload,
871 ::std::function<
void()> errorCallback
875 $getOnPlayerNetworkDisconnectedConnector();
877 MCAPI ::Bedrock::PubSub::Connector<
879 $getOnPlayerNetworkConnectedConnector();
881 MCAPI
void $onInvalidPlayerJoinedLobby(
::mce::UUID const& uuid, ::std::string
const& xuid);
887 MCAPI
void $onXboxUserBlocked(::std::string
const& xuid);
889 MCAPI
void $onXboxUserUnblocked(::std::string
const& xuid);
891 MCFOLD
void $onPlayerReady(
::Player& player);
893 MCAPI
void $handlePacketViolation(
894 ::std::shared_ptr<::IPacketSecurityController>
const& packetSecurityController,
895 ::std::error_code
const& errorCode,
896 ::PacketViolationResponse
const response,
897 ::MinecraftPacketIds
const packetId,
900 ::SubClientId
const clientSubId,
901 ::SubClientId
const senderSubId,
902 uint
const packetSize
905 MCAPI
void $sendPacketViolationWarningPacket(
906 ::std::error_code
const& errorCode,
907 ::PacketViolationResponse violationResponse,
908 ::MinecraftPacketIds violatingPacketId,
911 ::SubClientId clientSubId
914 MCAPI
void $sendServerLegacyParticle(::ParticleType name,
::Vec3 const& pos,
::Vec3 const&,
int data);
918 MCAPI
void $onDisconnect(
920 ::Connection::DisconnectFailReason
const discoReason,
921 ::Connection::DisconnectionStage
const disconnectStage,
922 ::std::string
const& messageFromServer,
923 ::std::string
const& messageBodyOverride,
925 ::std::string
const& telemetryOverride
928 MCAPI ::IncomingPacketFilterResult $allowIncomingPacketId(
930 ::MinecraftPacketIds packetId,
934 MCAPI ::OutgoingPacketFilterResult
935 $allowOutgoingPacket(::std::vector<::NetworkIdentifierWithSubId>
const& ids,
::Packet const& packet);
943 MCAPI
void $handle(
::NetworkIdentifier const& source, ::std::shared_ptr<::BlockActorDataPacket> packet);
985 MCAPI
void $handle(
::NetworkIdentifier const& source, ::std::shared_ptr<::InventoryTransactionPacket> packet);
993 MCAPI
void $handle(
::NetworkIdentifier const& source, ::std::shared_ptr<::LoginPacket> packet);
1001 MCAPI
void $handle(
::NetworkIdentifier const& source, ::std::shared_ptr<::MobEquipmentPacket> packet);
1060 MCAPI
void $handle(
::NetworkIdentifier const& source, ::std::shared_ptr<::SubClientLoginPacket> packet);
1106 MCAPI
void $sendSubClientLoginMessageLocal(
1121 MCAPI ::std::optional<::PlayerAuthenticationInfo>
1124 MCAPI
void $_onClientAsyncAuthorized(
1128 ::std::optional<::MessToken>
const& hostMessToken
1131 MCAPI ::ServerPlayer* $_getServerPlayer(
::NetworkIdentifier const& source, ::SubClientId subId);