diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h index cc1d1d56af..cbc49d6ea9 100644 --- a/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h +++ b/Gems/Multiplayer/Code/Include/Multiplayer/IMultiplayer.h @@ -94,7 +94,8 @@ namespace Multiplayer virtual bool Connect(AZStd::string remoteAddress, uint16_t port) = 0; // Disconnects all multiplayer connections, stops listening on the server and invokes handlers appropriate to network context - virtual void Terminate() = 0; + //! @param reason The reason for terminating connections + virtual void Terminate(AzNetworking::DisconnectReason reason) = 0; //! Adds a ClientDisconnectedEvent Handler which is invoked on the client when a disconnection occurs //! @param handler The ClientDisconnectedEvent Handler to add diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index fc176447ec..9c2fa2f828 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -214,10 +214,10 @@ namespace Multiplayer return m_networkInterface->Connect(address) != InvalidConnectionId; } - void MultiplayerSystemComponent::Terminate() + void MultiplayerSystemComponent::Terminate(AzNetworking::DisconnectReason reason) { // Cleanup connections, fire events and uninitialize state - auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::TerminatedByUser, TerminationEndpoint::Local); }; + auto visitor = [reason](IConnection& connection) { connection.Disconnect(reason, TerminationEndpoint::Local); }; m_networkInterface->GetConnectionSet().VisitConnections(visitor); if (GetAgentType() == MultiplayerAgentType::DedicatedServer || GetAgentType() == MultiplayerAgentType::ClientServer) { @@ -249,7 +249,7 @@ namespace Multiplayer { if (GetAgentType() == MultiplayerAgentType::Client) { - Terminate(); + Terminate(DisconnectReason::TerminatedByUser); } } @@ -293,7 +293,7 @@ namespace Multiplayer return true; } - auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::TerminatedByUser, TerminationEndpoint::Local); }; + auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::TerminatedByServer, TerminationEndpoint::Local); }; m_networkInterface->GetConnectionSet().VisitConnections(visitor); if (GetAgentType() == MultiplayerAgentType::DedicatedServer || GetAgentType() == MultiplayerAgentType::ClientServer) { @@ -716,7 +716,7 @@ namespace Multiplayer { if (m_networkInterface->GetConnectionSet().GetActiveConnectionCount() == 0) { - Terminate(); + Terminate(DisconnectReason::TerminatedByServer); } } } @@ -989,7 +989,7 @@ namespace Multiplayer void disconnect([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments) { - AZ::Interface::Get()->Terminate(); + AZ::Interface::Get()->Terminate(DisconnectReason::TerminatedByUser); } AZ_CONSOLEFREEFUNC(disconnect, AZ::ConsoleFunctorFlags::DontReplicate, "Disconnects any open multiplayer connections"); } diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h index cc5af38f04..8b030bd86f 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h @@ -114,7 +114,7 @@ namespace Multiplayer void AddSessionShutdownHandler(SessionShutdownEvent::Handler& handler) override; bool StartHosting(uint16_t port, bool isDedicated = true) override; bool Connect(AZStd::string remoteAddress, uint16_t port) override; - void Terminate() override; + void Terminate(AzNetworking::DisconnectReason reason) override; void SendReadyForEntityUpdates(bool readyForEntityUpdates) override; AZ::TimeMs GetCurrentHostTimeMs() const override; INetworkTime* GetNetworkTime() override;