From f58702683fda7d9b6c26548b1cf7e2382f958893 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Wed, 24 Apr 2024 16:28:09 +1000 Subject: [PATCH] log EntityMessageResponse error instead of throwing --- source/game/StarWorldClient.cpp | 28 ++++++++++++++-------------- source/game/StarWorldServer.cpp | 23 ++++++++++++----------- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/source/game/StarWorldClient.cpp b/source/game/StarWorldClient.cpp index 5f7e028..be5a56b 100644 --- a/source/game/StarWorldClient.cpp +++ b/source/game/StarWorldClient.cpp @@ -994,14 +994,14 @@ void WorldClient::handleIncomingPackets(List const& packets) { } else if (auto entityMessageResponsePacket = as(packet)) { if (!m_entityMessageResponses.contains(entityMessageResponsePacket->uuid)) - throw WorldClientException("EntityMessageResponse received for unknown context!"); - - auto response = m_entityMessageResponses.take(entityMessageResponsePacket->uuid); - if (entityMessageResponsePacket->response.isRight()) - response.fulfill(entityMessageResponsePacket->response.right()); - else - response.fail(entityMessageResponsePacket->response.left()); - + Logger::warn("EntityMessageResponse received for unknown context [{}]!", entityMessageResponsePacket->uuid.hex()); + else { + auto response = m_entityMessageResponses.take(entityMessageResponsePacket->uuid); + if (entityMessageResponsePacket->response.isRight()) + response.fulfill(entityMessageResponsePacket->response.right()); + else + response.fail(entityMessageResponsePacket->response.left()); + } } else if (auto updateWorldProperties = as(packet)) { // Kae: Properties set to null (nil from Lua) should be erased instead of lingering around for (auto& pair : updateWorldProperties->updatedProperties) { @@ -1031,12 +1031,12 @@ void WorldClient::handleIncomingPackets(List const& packets) { m_outgoingPackets.append(make_shared(interactResult.take(), entityInteract->requestId, entityInteract->interactRequest.sourceId)); } else if (auto interactResult = as(packet)) { - auto response = m_entityInteractionResponses.take(interactResult->requestId); - if (interactResult->action) - response.fulfill(interactResult->action); - else - response.fail("no interaction result"); - + if (auto response = m_entityInteractionResponses.maybeTake(interactResult->requestId)) { + if (interactResult->action) + response->fulfill(interactResult->action); + else + response->fail("no interaction result"); + } } else if (auto setPlayerStart = as(packet)) { m_playerStart = setPlayerStart->playerStart; m_respawnInWorld = setPlayerStart->respawnInWorld; diff --git a/source/game/StarWorldServer.cpp b/source/game/StarWorldServer.cpp index 1b4041f..bf7e030 100644 --- a/source/game/StarWorldServer.cpp +++ b/source/game/StarWorldServer.cpp @@ -507,17 +507,18 @@ void WorldServer::handleIncomingPackets(ConnectionId clientId, List c } else if (auto entityMessageResponsePacket = as(packet)) { if (!m_entityMessageResponses.contains(entityMessageResponsePacket->uuid)) - throw WorldServerException("ScriptedEntityResponse received for unknown context!"); - - auto response = m_entityMessageResponses.take(entityMessageResponsePacket->uuid).second; - if (response.is()) { - if (auto clientInfo = m_clientInfo.value(response.get())) - clientInfo->outgoingPackets.append(std::move(entityMessageResponsePacket)); - } else { - if (entityMessageResponsePacket->response.isRight()) - response.get>().fulfill(entityMessageResponsePacket->response.right()); - else - response.get>().fail(entityMessageResponsePacket->response.left()); + Logger::warn("EntityMessageResponse received for unknown context [{}]!", entityMessageResponsePacket->uuid.hex()); + else { + auto response = m_entityMessageResponses.take(entityMessageResponsePacket->uuid).second; + if (response.is()) { + if (auto clientInfo = m_clientInfo.value(response.get())) + clientInfo->outgoingPackets.append(std::move(entityMessageResponsePacket)); + } else { + if (entityMessageResponsePacket->response.isRight()) + response.get>().fulfill(entityMessageResponsePacket->response.right()); + else + response.get>().fail(entityMessageResponsePacket->response.left()); + } } } else if (auto pingPacket = as(packet)) { clientInfo->outgoingPackets.append(make_shared(pingPacket->time));