From d969c4a2c2493607ebdbe07ca9d35e803f1c4ee9 Mon Sep 17 00:00:00 2001 From: Lion Kortlepel Date: Fri, 11 Feb 2022 10:36:10 +0100 Subject: [PATCH] Use nlohmann/json for IsUnicycle --- CMakeLists.txt | 1 + src/TServer.cpp | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f818d6..a2bdb67 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,7 @@ include_directories("${PROJECT_SOURCE_DIR}/deps/websocketpp") include_directories("${PROJECT_SOURCE_DIR}/deps/commandline") include_directories("${PROJECT_SOURCE_DIR}/deps/sol2/include") include_directories("${PROJECT_SOURCE_DIR}/deps/cpp-httplib") +include_directories("${PROJECT_SOURCE_DIR}/deps/json/single_include") include_directories("${PROJECT_SOURCE_DIR}/deps") add_compile_definitions(CPPHTTPLIB_OPENSSL_SUPPORT) diff --git a/src/TServer.cpp b/src/TServer.cpp index 8f389cf..a4328e2 100644 --- a/src/TServer.cpp +++ b/src/TServer.cpp @@ -15,8 +15,6 @@ #include "Json.h" -namespace json = nlohmann::json; - TServer::TServer(const std::vector& Arguments) { beammp_info("BeamMP Server v" + Application::ServerVersionString()); Application::SetSubsystemStatus("Server", Application::Status::Starting); @@ -173,15 +171,18 @@ void TServer::HandleEvent(TClient& c, const std::string& Data) { } } bool TServer::IsUnicycle(TClient& c, const std::string& CarJson) { - rapidjson::Document Car; - Car.Parse(CarJson.c_str(), CarJson.size()); - if (Car.HasParseError()) { - beammp_error("Failed to parse vehicle data -> " + CarJson); - } else if (Car["jbm"].IsString() && std::string(Car["jbm"].GetString()) == "unicycle") { - return true; + try { + auto Car = nlohmann::json::parse(CarJson); + const std::string jbm = "jbm"; + if (Car.contains(jbm) && Car["jbm"].is_string() && Car["jbm"] == "unicycle") { + return true; + } + } catch (const std::exception& e) { + beammp_error("Failed to parse vehicle data as json for client " + std::to_string(c.GetID()) + ": '" + CarJson + "'"); } return false; } + bool TServer::ShouldSpawn(TClient& c, const std::string& CarJson, int ID) { if (c.GetUnicycleID() > -1 && (c.GetCarCount() - 1) < Application::Settings.MaxCars) {