From f4519330c3e89cdda09f34c332bdcab8bedb83e6 Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 30 Jul 2025 11:12:12 +0300 Subject: [PATCH 1/5] Adding checks for other fields --- src/mvrxchange/mvrxchange_message.cpp | 140 +++++++++++++++++++++----- 1 file changed, 115 insertions(+), 25 deletions(-) diff --git a/src/mvrxchange/mvrxchange_message.cpp b/src/mvrxchange/mvrxchange_message.cpp index 8f8e035b..69530e6a 100644 --- a/src/mvrxchange/mvrxchange_message.cpp +++ b/src/mvrxchange/mvrxchange_message.cpp @@ -187,6 +187,18 @@ void MVR_COMMIT_FromJson(const nlohmann::json& payload, IMVRxchangeService::MVR_ } } +void isRetOkay( const nlohmann::json& payload, VectorworksMVR::IMVRxchangeService::IMVRxchangeMessage& in ) +{ + if ( payload.contains( "OK" ) ) + { + in.RetIsOK = HandleStringBool( payload[ "OK" ] ); + } + else + { + in.RetIsOK = false; + } +} + // ----------------------------------------- void MVRxchangePacket::FromExternalMessage(const VectorworksMVR::IMVRxchangeService::IMVRxchangeMessage& in) @@ -342,36 +354,88 @@ void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, if (payload["Type"] == "MVR_JOIN") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_JOIN; - in.JOIN.VersionMajor = HandleStringNumber(payload["verMajor"]); - in.JOIN.VersionMinor = HandleStringNumber(payload["verMinor"]); - strcpy(in.JOIN.Provider, payload["Provider"].get().c_str()); - strcpy(in.JOIN.StationName, payload["StationName"].get().c_str()); - noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["StationUUID"].get(), in.JOIN.StationUUID); + + if ( payload.contains( "verMajor" ) ) + { + in.JOIN.VersionMajor = HandleStringNumber(payload["verMajor"]); + } + + if ( payload.contains( "verMinor" ) ) + { + in.JOIN.VersionMinor = HandleStringNumber(payload["verMinor"]); + } + + if ( payload.contains( "Provider" ) ) + { + strcpy(in.JOIN.Provider, payload["Provider"].get().c_str()); + } + + if ( payload.contains( "StationName" ) ) + { + strcpy( in.JOIN.StationName, payload[ "StationName" ].get().c_str() ); + } + + if ( payload.contains( "StationUUID" ) ) + { + noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["StationUUID"].get(), in.JOIN.StationUUID); + } in.JOIN.Commits.clear(); - for (auto &it : payload["Commits"]) + + if ( payload.contains( "Commits" ) ) { - in.JOIN.Commits.emplace_back(); - MVR_COMMIT_FromJson(it, in.JOIN.Commits.back()); + for (auto &it : payload["Commits"]) + { + in.JOIN.Commits.emplace_back(); + MVR_COMMIT_FromJson(it, in.JOIN.Commits.back()); + } } } else if (payload["Type"] == "MVR_JOIN_RET") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_JOIN_RET; - in.JOIN.VersionMajor = HandleStringNumber(payload["verMajor"]); - in.JOIN.VersionMinor = HandleStringNumber(payload["verMinor"]); - strcpy(in.JOIN.Provider, payload["Provider"].get().c_str()); - strcpy(in.JOIN.StationName, payload["StationName"].get().c_str()); - noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["StationUUID"].get(), in.JOIN.StationUUID); - in.RetIsOK = HandleStringBool(payload["OK"]); - strcpy(in.RetError, payload["Message"].get().c_str()); + if ( payload.contains( "verMajor" ) ) + { + in.JOIN.VersionMajor = HandleStringNumber( payload[ "verMajor" ] ); + } + + if ( payload.contains( "verMinor" ) ) + { + in.JOIN.VersionMinor = HandleStringNumber( payload[ "verMinor" ] ); + } + + if ( payload.contains( "Provider" ) ) + { + strcpy( in.JOIN.Provider, payload[ "Provider" ].get().c_str() ); + } + + if ( payload.contains( "StationName" ) ) + { + strcpy( in.JOIN.StationName, payload[ "StationName" ].get().c_str() ); + } + + if ( payload.contains( "StationUUID" ) ) + { + noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["StationUUID"].get(), in.JOIN.StationUUID); + } + + isRetOkay( payload, in ); + + if ( payload.contains( "Message" ) ) + { + strcpy(in.RetError, payload["Message"].get().c_str()); + } in.JOIN.Commits.clear(); - for (auto &it : payload["Commits"]) + + if ( payload.contains( "Commits" ) ) { - in.JOIN.Commits.emplace_back(); - MVR_COMMIT_FromJson(it, in.JOIN.Commits.back()); + for (auto &it : payload["Commits"]) + { + in.JOIN.Commits.emplace_back(); + MVR_COMMIT_FromJson(it, in.JOIN.Commits.back()); + } } } else if (payload["Type"] == "MVR_COMMIT") @@ -382,22 +446,40 @@ void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, else if (payload["Type"] == "MVR_COMMIT_RET") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_COMMIT_RET; - in.RetIsOK = HandleStringBool(payload["OK"]); + isRetOkay( payload, in ); + strcpy(in.RetError, payload["Message"].get().c_str()); } else if (payload["Type"] == "MVR_REQUEST") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_REQUEST; - noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["FileUUID"].get(), in.REQUEST.FileUUID); + if ( payload.contains( "FileUUID" ) ) + { + noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["FileUUID"].get(), in.REQUEST.FileUUID); + } in.REQUEST.FromStationUUID.clear(); // TODO - for (const auto &e : payload["FromStationUUID"]) + if ( payload.contains( "FromStationUUID" ) ) { - in.REQUEST.FromStationUUID.emplace_back(); - if (!SceneData::GdtfConverter::ConvertUUID(e.get(), in.REQUEST.FromStationUUID.back())) + for (const auto &e : payload["FromStationUUID"]) { - in.REQUEST.FromStationUUID.pop_back(); + in.REQUEST.FromStationUUID.emplace_back(); + if (!SceneData::GdtfConverter::ConvertUUID(e.get(), in.REQUEST.FromStationUUID.back())) + { + in.REQUEST.FromStationUUID.pop_back(); + } + } + } + else if ( payload.contains( "StationUUID" ) ) + { + for (const auto &e : payload["StationUUID"]) + { + in.REQUEST.FromStationUUID.emplace_back(); + if (!SceneData::GdtfConverter::ConvertUUID(e.get(), in.REQUEST.FromStationUUID.back())) + { + in.REQUEST.FromStationUUID.pop_back(); + } } } } @@ -410,7 +492,15 @@ void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, else if (payload["Type"] == "MVR_LEAVE") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_LEAVE; - noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["FromStationUUID"].get(), in.LEAVE.FromStationUUID); + + if ( payload.contains( "FromStationUUID" ) ) + { + noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["FromStationUUID"].get(), in.LEAVE.FromStationUUID); + } + else if ( payload.contains( "StationUUID" ) ) + { + noUUIDError = SceneData::GdtfConverter::ConvertUUID( payload[ "StationUUID" ].get(), in.LEAVE.FromStationUUID ); + } } else if (payload["Type"] == "MVR_LEAVE_RET") { From f20fa79a18c1e29c1acb6047a98a220f3efb1d2f Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 30 Jul 2025 11:15:02 +0300 Subject: [PATCH 2/5] Fixing build error --- src/mvrxchange/mvrxchange_message.cpp | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/mvrxchange/mvrxchange_message.cpp b/src/mvrxchange/mvrxchange_message.cpp index 69530e6a..195820ab 100644 --- a/src/mvrxchange/mvrxchange_message.cpp +++ b/src/mvrxchange/mvrxchange_message.cpp @@ -187,18 +187,6 @@ void MVR_COMMIT_FromJson(const nlohmann::json& payload, IMVRxchangeService::MVR_ } } -void isRetOkay( const nlohmann::json& payload, VectorworksMVR::IMVRxchangeService::IMVRxchangeMessage& in ) -{ - if ( payload.contains( "OK" ) ) - { - in.RetIsOK = HandleStringBool( payload[ "OK" ] ); - } - else - { - in.RetIsOK = false; - } -} - // ----------------------------------------- void MVRxchangePacket::FromExternalMessage(const VectorworksMVR::IMVRxchangeService::IMVRxchangeMessage& in) @@ -348,6 +336,18 @@ bool HandleStringBool(const nlohmann::json& item) } } +void isRetOkay( const nlohmann::json& payload, VectorworksMVR::IMVRxchangeService::IMVRxchangeMessage& in ) +{ + if ( payload.contains( "OK" ) ) + { + in.RetIsOK = HandleStringBool( payload[ "OK" ] ); + } + else + { + in.RetIsOK = false; + } +} + void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, VectorworksMVR::IMVRxchangeService::IMVRxchangeMessage &in) { bool noUUIDError = true; @@ -486,7 +486,7 @@ void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, else if (payload["Type"] == "MVR_REQUEST_RET") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_REQUEST_RET; - in.RetIsOK = HandleStringBool(payload["OK"]); + isRetOkay( payload, in ); strcpy(in.RetError, payload["Message"].get().c_str()); } else if (payload["Type"] == "MVR_LEAVE") @@ -505,7 +505,7 @@ void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, else if (payload["Type"] == "MVR_LEAVE_RET") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_LEAVE_RET; - in.RetIsOK = HandleStringBool(payload["OK"]); + isRetOkay( payload, in ); strcpy(in.RetError, payload["Message"].get().c_str()); }else{ throw std::runtime_error("Unable to parse payload type correctly"); From ec616701020db1478a3653a3675ef206401b9500 Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 27 Aug 2025 16:05:16 +0300 Subject: [PATCH 3/5] Revert "Fixing build error" This reverts commit f20fa79a18c1e29c1acb6047a98a220f3efb1d2f. --- src/mvrxchange/mvrxchange_message.cpp | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/mvrxchange/mvrxchange_message.cpp b/src/mvrxchange/mvrxchange_message.cpp index 195820ab..69530e6a 100644 --- a/src/mvrxchange/mvrxchange_message.cpp +++ b/src/mvrxchange/mvrxchange_message.cpp @@ -187,6 +187,18 @@ void MVR_COMMIT_FromJson(const nlohmann::json& payload, IMVRxchangeService::MVR_ } } +void isRetOkay( const nlohmann::json& payload, VectorworksMVR::IMVRxchangeService::IMVRxchangeMessage& in ) +{ + if ( payload.contains( "OK" ) ) + { + in.RetIsOK = HandleStringBool( payload[ "OK" ] ); + } + else + { + in.RetIsOK = false; + } +} + // ----------------------------------------- void MVRxchangePacket::FromExternalMessage(const VectorworksMVR::IMVRxchangeService::IMVRxchangeMessage& in) @@ -336,18 +348,6 @@ bool HandleStringBool(const nlohmann::json& item) } } -void isRetOkay( const nlohmann::json& payload, VectorworksMVR::IMVRxchangeService::IMVRxchangeMessage& in ) -{ - if ( payload.contains( "OK" ) ) - { - in.RetIsOK = HandleStringBool( payload[ "OK" ] ); - } - else - { - in.RetIsOK = false; - } -} - void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, VectorworksMVR::IMVRxchangeService::IMVRxchangeMessage &in) { bool noUUIDError = true; @@ -486,7 +486,7 @@ void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, else if (payload["Type"] == "MVR_REQUEST_RET") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_REQUEST_RET; - isRetOkay( payload, in ); + in.RetIsOK = HandleStringBool(payload["OK"]); strcpy(in.RetError, payload["Message"].get().c_str()); } else if (payload["Type"] == "MVR_LEAVE") @@ -505,7 +505,7 @@ void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, else if (payload["Type"] == "MVR_LEAVE_RET") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_LEAVE_RET; - isRetOkay( payload, in ); + in.RetIsOK = HandleStringBool(payload["OK"]); strcpy(in.RetError, payload["Message"].get().c_str()); }else{ throw std::runtime_error("Unable to parse payload type correctly"); From 7f099545236969818f420fd7ce96af69c6231e0f Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 27 Aug 2025 16:05:20 +0300 Subject: [PATCH 4/5] Revert "Adding checks for other fields" This reverts commit f4519330c3e89cdda09f34c332bdcab8bedb83e6. --- src/mvrxchange/mvrxchange_message.cpp | 140 +++++--------------------- 1 file changed, 25 insertions(+), 115 deletions(-) diff --git a/src/mvrxchange/mvrxchange_message.cpp b/src/mvrxchange/mvrxchange_message.cpp index 69530e6a..8f8e035b 100644 --- a/src/mvrxchange/mvrxchange_message.cpp +++ b/src/mvrxchange/mvrxchange_message.cpp @@ -187,18 +187,6 @@ void MVR_COMMIT_FromJson(const nlohmann::json& payload, IMVRxchangeService::MVR_ } } -void isRetOkay( const nlohmann::json& payload, VectorworksMVR::IMVRxchangeService::IMVRxchangeMessage& in ) -{ - if ( payload.contains( "OK" ) ) - { - in.RetIsOK = HandleStringBool( payload[ "OK" ] ); - } - else - { - in.RetIsOK = false; - } -} - // ----------------------------------------- void MVRxchangePacket::FromExternalMessage(const VectorworksMVR::IMVRxchangeService::IMVRxchangeMessage& in) @@ -354,88 +342,36 @@ void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, if (payload["Type"] == "MVR_JOIN") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_JOIN; - - if ( payload.contains( "verMajor" ) ) - { - in.JOIN.VersionMajor = HandleStringNumber(payload["verMajor"]); - } - - if ( payload.contains( "verMinor" ) ) - { - in.JOIN.VersionMinor = HandleStringNumber(payload["verMinor"]); - } - - if ( payload.contains( "Provider" ) ) - { - strcpy(in.JOIN.Provider, payload["Provider"].get().c_str()); - } - - if ( payload.contains( "StationName" ) ) - { - strcpy( in.JOIN.StationName, payload[ "StationName" ].get().c_str() ); - } - - if ( payload.contains( "StationUUID" ) ) - { - noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["StationUUID"].get(), in.JOIN.StationUUID); - } + in.JOIN.VersionMajor = HandleStringNumber(payload["verMajor"]); + in.JOIN.VersionMinor = HandleStringNumber(payload["verMinor"]); + strcpy(in.JOIN.Provider, payload["Provider"].get().c_str()); + strcpy(in.JOIN.StationName, payload["StationName"].get().c_str()); + noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["StationUUID"].get(), in.JOIN.StationUUID); in.JOIN.Commits.clear(); - - if ( payload.contains( "Commits" ) ) + for (auto &it : payload["Commits"]) { - for (auto &it : payload["Commits"]) - { - in.JOIN.Commits.emplace_back(); - MVR_COMMIT_FromJson(it, in.JOIN.Commits.back()); - } + in.JOIN.Commits.emplace_back(); + MVR_COMMIT_FromJson(it, in.JOIN.Commits.back()); } } else if (payload["Type"] == "MVR_JOIN_RET") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_JOIN_RET; + in.JOIN.VersionMajor = HandleStringNumber(payload["verMajor"]); + in.JOIN.VersionMinor = HandleStringNumber(payload["verMinor"]); + strcpy(in.JOIN.Provider, payload["Provider"].get().c_str()); + strcpy(in.JOIN.StationName, payload["StationName"].get().c_str()); + noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["StationUUID"].get(), in.JOIN.StationUUID); - if ( payload.contains( "verMajor" ) ) - { - in.JOIN.VersionMajor = HandleStringNumber( payload[ "verMajor" ] ); - } - - if ( payload.contains( "verMinor" ) ) - { - in.JOIN.VersionMinor = HandleStringNumber( payload[ "verMinor" ] ); - } - - if ( payload.contains( "Provider" ) ) - { - strcpy( in.JOIN.Provider, payload[ "Provider" ].get().c_str() ); - } - - if ( payload.contains( "StationName" ) ) - { - strcpy( in.JOIN.StationName, payload[ "StationName" ].get().c_str() ); - } - - if ( payload.contains( "StationUUID" ) ) - { - noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["StationUUID"].get(), in.JOIN.StationUUID); - } - - isRetOkay( payload, in ); - - if ( payload.contains( "Message" ) ) - { - strcpy(in.RetError, payload["Message"].get().c_str()); - } + in.RetIsOK = HandleStringBool(payload["OK"]); + strcpy(in.RetError, payload["Message"].get().c_str()); in.JOIN.Commits.clear(); - - if ( payload.contains( "Commits" ) ) + for (auto &it : payload["Commits"]) { - for (auto &it : payload["Commits"]) - { - in.JOIN.Commits.emplace_back(); - MVR_COMMIT_FromJson(it, in.JOIN.Commits.back()); - } + in.JOIN.Commits.emplace_back(); + MVR_COMMIT_FromJson(it, in.JOIN.Commits.back()); } } else if (payload["Type"] == "MVR_COMMIT") @@ -446,40 +382,22 @@ void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, else if (payload["Type"] == "MVR_COMMIT_RET") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_COMMIT_RET; - isRetOkay( payload, in ); - + in.RetIsOK = HandleStringBool(payload["OK"]); strcpy(in.RetError, payload["Message"].get().c_str()); } else if (payload["Type"] == "MVR_REQUEST") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_REQUEST; - if ( payload.contains( "FileUUID" ) ) - { - noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["FileUUID"].get(), in.REQUEST.FileUUID); - } + noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["FileUUID"].get(), in.REQUEST.FileUUID); in.REQUEST.FromStationUUID.clear(); // TODO - if ( payload.contains( "FromStationUUID" ) ) + for (const auto &e : payload["FromStationUUID"]) { - for (const auto &e : payload["FromStationUUID"]) + in.REQUEST.FromStationUUID.emplace_back(); + if (!SceneData::GdtfConverter::ConvertUUID(e.get(), in.REQUEST.FromStationUUID.back())) { - in.REQUEST.FromStationUUID.emplace_back(); - if (!SceneData::GdtfConverter::ConvertUUID(e.get(), in.REQUEST.FromStationUUID.back())) - { - in.REQUEST.FromStationUUID.pop_back(); - } - } - } - else if ( payload.contains( "StationUUID" ) ) - { - for (const auto &e : payload["StationUUID"]) - { - in.REQUEST.FromStationUUID.emplace_back(); - if (!SceneData::GdtfConverter::ConvertUUID(e.get(), in.REQUEST.FromStationUUID.back())) - { - in.REQUEST.FromStationUUID.pop_back(); - } + in.REQUEST.FromStationUUID.pop_back(); } } } @@ -492,15 +410,7 @@ void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, else if (payload["Type"] == "MVR_LEAVE") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_LEAVE; - - if ( payload.contains( "FromStationUUID" ) ) - { - noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["FromStationUUID"].get(), in.LEAVE.FromStationUUID); - } - else if ( payload.contains( "StationUUID" ) ) - { - noUUIDError = SceneData::GdtfConverter::ConvertUUID( payload[ "StationUUID" ].get(), in.LEAVE.FromStationUUID ); - } + noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["FromStationUUID"].get(), in.LEAVE.FromStationUUID); } else if (payload["Type"] == "MVR_LEAVE_RET") { From 1f408154da20a279298ed868d3e6b4af73ea41e4 Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 27 Aug 2025 16:11:19 +0300 Subject: [PATCH 5/5] Support for "FromStationUUID" and "StationUUID" for MVR_LEAVE --- src/mvrxchange/mvrxchange_message.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/mvrxchange/mvrxchange_message.cpp b/src/mvrxchange/mvrxchange_message.cpp index 8f8e035b..71787b66 100644 --- a/src/mvrxchange/mvrxchange_message.cpp +++ b/src/mvrxchange/mvrxchange_message.cpp @@ -410,7 +410,14 @@ void MVRxchangePacket::Internal_ToExternalMessage(const nlohmann::json& payload, else if (payload["Type"] == "MVR_LEAVE") { in.Type = VectorworksMVR::IMVRxchangeService::MVRxchangeMessageType::MVR_LEAVE; - noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["FromStationUUID"].get(), in.LEAVE.FromStationUUID); + if ( payload.contains( "FromStationUUID" ) ) + { + noUUIDError = SceneData::GdtfConverter::ConvertUUID(payload["FromStationUUID"].get(), in.LEAVE.FromStationUUID); + } + else if ( payload.contains( "StationUUID" ) ) + { + noUUIDError = SceneData::GdtfConverter::ConvertUUID( payload[ "StationUUID" ].get(), in.LEAVE.FromStationUUID ); + } } else if (payload["Type"] == "MVR_LEAVE_RET") {