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

Method ProcessCommand

Sources/Jazz2/Multiplayer/MpLevelHandler.cpp:2355–2773  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2353 }
2354
2355 bool MpLevelHandler::ProcessCommand(const Peer& peer, StringView line, bool isAdmin)
2356 {
2357 char infoBuffer[256];
2358
2359 if (line == "/endpoints"_s) {
2360 if (isAdmin) {
2361 auto endpoints = _networkManager->GetServerEndpoints();
2362 for (const auto& endpoint : endpoints) {
2363 SendMessage(peer, UI::MessageLevel::Confirm, endpoint);
2364 }
2365 auto& serverConfig = _networkManager->GetServerConfiguration();
2366 StringView address; std::uint16_t port;
2367 if (NetworkManagerBase::TrySplitAddressAndPort(serverConfig.ServerAddressOverride, address, port)) {
2368 if (port == 0) {
2369 port = serverConfig.ServerPort;
2370 }
2371 std::size_t length = formatInto(infoBuffer, "{}:{} (Override)", address, port);
2372 SendMessage(peer, UI::MessageLevel::Confirm, { infoBuffer, length });
2373 }
2374 return true;
2375 }
2376 } else if (line == "/info"_s) {
2377 auto& serverConfig = _networkManager->GetServerConfiguration();
2378
2379 std::size_t length = formatInto(infoBuffer, "Server: {}{}", serverConfig.ServerName, serverConfig.IsPrivate ? " (Private)" : "");
2380 SendMessage(peer, UI::MessageLevel::Confirm, { infoBuffer, length });
2381 length = formatInto(infoBuffer, "Current level: \"{}\" ({}{}{})",
2382 _levelName, NetworkManager::GameModeToString(serverConfig.GameMode),
2383 serverConfig.Elimination ? "/Elimination" : "", _isReforged ? "/Reforged" : "");
2384 SendMessage(peer, UI::MessageLevel::Confirm, { infoBuffer, length });
2385 length = formatInto(infoBuffer, "Players: {}/{}",
2386 (std::uint32_t)_networkManager->GetPeerCount(), serverConfig.MaxPlayerCount);
2387 SendMessage(peer, UI::MessageLevel::Confirm, { infoBuffer, length });
2388 if (!_players.empty()) {
2389 length = formatInto(infoBuffer, "Server load: {:.1f} ms ({:.1f})",
2390 (theApplication().GetFrameTimer().GetLastFrameDuration() * 1000.0f), theApplication().GetFrameTimer().GetAverageFps());
2391 } else {
2392 length = formatInto(infoBuffer, "Server load: - ms");
2393 }
2394 SendMessage(peer, UI::MessageLevel::Confirm, { infoBuffer, length });
2395
2396 auto uptimeSecs = (DateTime::UtcNow().ToUnixMilliseconds() / 1000) - (std::int64_t)serverConfig.StartUnixTimestamp;
2397 auto hours = (std::int32_t)(uptimeSecs / 3600);
2398 auto minutes = (std::int32_t)(uptimeSecs % 3600) / 60;
2399 auto seconds = (std::int32_t)(uptimeSecs % 60);
2400 length = formatInto(infoBuffer, "Uptime: {}:{:.2}:{:.2}", hours, minutes, seconds);
2401 SendMessage(peer, UI::MessageLevel::Confirm, { infoBuffer, length });
2402
2403 if (isAdmin) {
2404 length = formatInto(infoBuffer, "Config Path: \"{}\"", serverConfig.FilePath);
2405 SendMessage(peer, UI::MessageLevel::Confirm, { infoBuffer, length });
2406 }
2407
2408 if (!serverConfig.Playlist.empty()) {
2409 length = formatInto(infoBuffer, "Playlist: {}/{}{}",
2410 (std::uint32_t)(serverConfig.PlaylistIndex + 1), (std::uint32_t)serverConfig.Playlist.size(), serverConfig.RandomizePlaylist ? " (Random)" : "");
2411 SendMessage(peer, UI::MessageLevel::Confirm, { infoBuffer, length });
2412 }

Callers 1

StartProcessingStdinMethod · 0.45

Calls 15

SendMessageFunction · 0.85
formatIntoFunction · 0.85
lowercaseFunction · 0.85
replaceAllFunction · 0.85
stou32Function · 0.85
GetPeerCountMethod · 0.80
GetLastFrameDurationMethod · 0.80
GetAverageFpsMethod · 0.80
ToUnixMillisecondsMethod · 0.80
GetPeersMethod · 0.80
GetRoundTripTimeMsMethod · 0.80
LevelExistsMethod · 0.80

Tested by

no test coverage detected