MCPcopy Create free account
hub / github.com/deathkiller/jazz2-native / CreateServer

Method CreateServer

Sources/Main.cpp:950–1014  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

948}
949
950bool GameEventHandler::CreateServer(ServerInitialization&& serverInit)
951{
952# if defined(DEATH_TARGET_EMSCRIPTEN)
953 // Creating a server is not supported on Emscripten
954 return false;
955# else
956 _networkManager = std::make_unique<NetworkManager>();
957
958 if (serverInit.Configuration.ServerName.empty()) {
959 serverInit.Configuration.ServerName = _("Unnamed server");
960 }
961
962 if (serverInit.Configuration.PlaylistIndex >= 0 && serverInit.Configuration.PlaylistIndex < serverInit.Configuration.Playlist.size()) {
963 auto& playlistEntry = serverInit.Configuration.Playlist[serverInit.Configuration.PlaylistIndex];
964
965 auto level = playlistEntry.LevelName.partition('/');
966 if (playlistEntry.LevelName.contains('/')) {
967 serverInit.InitialLevel.LevelName = playlistEntry.LevelName;
968 } else {
969 serverInit.InitialLevel.LevelName = "unknown/"_s + playlistEntry.LevelName;
970 }
971
972 // Override properties
973 serverInit.Configuration.ReforgedGameplay = playlistEntry.ReforgedGameplay;
974 serverInit.Configuration.Elimination = playlistEntry.Elimination;
975 serverInit.Configuration.InitialPlayerHealth = playlistEntry.InitialPlayerHealth;
976 serverInit.Configuration.MaxGameTimeSecs = playlistEntry.MaxGameTimeSecs;
977 serverInit.Configuration.PreGameSecs = playlistEntry.PreGameSecs;
978 serverInit.Configuration.TotalKills = playlistEntry.TotalKills;
979 serverInit.Configuration.TotalLaps = playlistEntry.TotalLaps;
980 serverInit.Configuration.TotalTreasureCollected = playlistEntry.TotalTreasureCollected;
981 serverInit.Configuration.GameMode = playlistEntry.GameMode;
982 }
983
984 if (serverInit.InitialLevel.LevelName.empty()) {
985 LOGE("Initial level is not specified");
986 return false;
987 } else if (!ContentResolver::Get().LevelExists(serverInit.InitialLevel.LevelName)) {
988 LOGE("Cannot find initial level \"{}\"", serverInit.InitialLevel.LevelName);
989 return false;
990 }
991
992 serverInit.InitialLevel.IsReforged = serverInit.Configuration.ReforgedGameplay;
993
994 if (!_networkManager->CreateServer(this, std::move(serverInit.Configuration))) {
995 return false;
996 }
997
998 auto& serverConfig = _networkManager->GetServerConfiguration();
999 LOGI("[MP] Creating {} server \"{}\" on port {}...", serverConfig.IsPrivate ? "private"_s : "public"_s, serverConfig.ServerName, serverConfig.ServerPort);
1000
1001 InvokeAsync([this, serverInit = std::move(serverInit)]() mutable {
1002 auto levelHandler = std::make_shared<MpLevelHandler>(this,
1003 _networkManager.get(), MpLevelHandler::LevelState::InitialUpdatePending, true);
1004 if (!levelHandler->Initialize(serverInit.InitialLevel)) {
1005 LOGE("[MP] Failed to load initial level \"{}\", shutting down server", serverInit.InitialLevel.LevelName);
1006 theApplication().Quit();
1007 return;

Callers

nothing calls this directly

Calls 9

_Function · 0.85
LevelExistsMethod · 0.80
emptyMethod · 0.45
sizeMethod · 0.45
partitionMethod · 0.45
containsMethod · 0.45
getMethod · 0.45
InitializeMethod · 0.45
QuitMethod · 0.45

Tested by

no test coverage detected