Adjust cleanup logic to handle Session events more cohesively

This commit is contained in:
puvvadar
2021-06-23 10:56:22 -07:00
parent 9aa44a56e7
commit bda758a9c5
3 changed files with 28 additions and 10 deletions
@@ -115,6 +115,10 @@ namespace AzNetworking
bool UdpConnection::Disconnect(DisconnectReason reason, TerminationEndpoint endpoint)
{
if (m_state == ConnectionState::Disconnected)
{
return true;
}
if (m_state == ConnectionState::Disconnecting)
{
AZStd::string reasonString = ToString(reason);
@@ -25,8 +25,8 @@ namespace Multiplayer
constexpr AZStd::string_view MPEditorInterfaceName("MultiplayerEditorNetworkInterface");
constexpr AZStd::string_view LocalHost("127.0.0.1");
constexpr uint16_t DefaultServerPort = 30090;
constexpr uint16_t DefaultServerEditorPort = 30091;
constexpr uint16_t DefaultServerPort = 33450;
constexpr uint16_t DefaultServerEditorPort = 33451;
}
@@ -216,18 +216,24 @@ namespace Multiplayer
void MultiplayerSystemComponent::Terminate()
{
// Cleanup connections, fire events and uninitialize state
auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::TerminatedByUser, TerminationEndpoint::Local); };
m_networkInterface->GetConnectionSet().VisitConnections(visitor);
if (GetAgentType() == MultiplayerAgentType::DedicatedServer || GetAgentType() == MultiplayerAgentType::ClientServer)
{
m_networkInterface->StopListening();
m_shutdownEvent.Signal(m_networkInterface);
}
InitializeMultiplayer(MultiplayerAgentType::Uninitialized);
// Signal session management, do this after uninitializing state
if (GetAgentType() == MultiplayerAgentType::DedicatedServer || GetAgentType() == MultiplayerAgentType::ClientServer)
{
if (AZ::Interface<AzFramework::ISessionHandlingProviderRequests>::Get() != nullptr)
{
AZ::Interface<AzFramework::ISessionHandlingProviderRequests>::Get()->HandleDestroySession();
}
}
InitializeMultiplayer(MultiplayerAgentType::Uninitialized);
}
bool MultiplayerSystemComponent::RequestPlayerJoinSession(const AzFramework::SessionConnectionConfig& config)
@@ -281,14 +287,22 @@ namespace Multiplayer
bool MultiplayerSystemComponent::OnDestroySessionBegin()
{
bool disconnectSuccessful = true;
IConnectionSet& connectionSet = m_networkInterface->GetConnectionSet();
connectionSet.VisitConnections([&disconnectSuccessful](IConnection& connection)
// This can be triggered external from Multiplayer so only run if we are in an Initialized state
if (GetAgentType() == MultiplayerAgentType::Uninitialized)
{
bool didDisconnect = connection.Disconnect(DisconnectReason::TerminatedByServer, TerminationEndpoint::Remote);
disconnectSuccessful = disconnectSuccessful && didDisconnect;
});
return disconnectSuccessful;
return true;
}
auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::TerminatedByUser, TerminationEndpoint::Local); };
m_networkInterface->GetConnectionSet().VisitConnections(visitor);
if (GetAgentType() == MultiplayerAgentType::DedicatedServer || GetAgentType() == MultiplayerAgentType::ClientServer)
{
m_networkInterface->StopListening();
m_shutdownEvent.Signal(m_networkInterface);
}
InitializeMultiplayer(MultiplayerAgentType::Uninitialized);
return true;
}
void MultiplayerSystemComponent::OnTick(float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time)