diff --git a/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml b/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml
index ce8931107f..3abd2a86d9 100644
--- a/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml
+++ b/Gems/Multiplayer/Code/Source/AutoGen/Multiplayer.AutoPackets.xml
@@ -9,13 +9,16 @@
-
+
+
+
+
diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp
index e4256a875c..dc86a07945 100644
--- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp
+++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp
@@ -213,6 +213,8 @@ namespace Multiplayer
reinterpret_cast(connection->GetUserData())->SetProviderTicket(config.m_playerSessionId);
}
+ connection->SendReliablePacket(MultiplayerPackets::ValidateSession(config.m_playerSessionId.c_str()));
+
return true;
}
@@ -414,22 +416,6 @@ namespace Multiplayer
[[maybe_unused]] MultiplayerPackets::Connect& packet
)
{
- // Validate our session with the provider if any
- if (AZ::Interface::Get() != nullptr)
- {
- AzFramework::PlayerConnectionConfig config;
- config.m_playerConnectionId = aznumeric_cast(connection->GetConnectionId());
- config.m_playerSessionId = packet.GetTicket();
- if(!AZ::Interface::Get()->ValidatePlayerJoinSession(config))
- {
- auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::TerminatedByUser, TerminationEndpoint::Local); };
- m_networkInterface->GetConnectionSet().VisitConnections(visitor);
- return true;
- }
-
- reinterpret_cast(connection->GetUserData())->SetProviderTicket(packet.GetTicket().c_str());
- }
-
if (connection->SendReliablePacket(MultiplayerPackets::Accept(InvalidHostId, sv_map)))
{
// Sync our console
@@ -455,6 +441,32 @@ namespace Multiplayer
return true;
}
+ bool MultiplayerSystemComponent::HandleRequest
+ (
+ [[maybe_unused]] AzNetworking::IConnection* connection,
+ [[maybe_unused]] const IPacketHeader& packetHeader,
+ [[maybe_unused]] MultiplayerPackets::ValidateSession& packet
+ )
+ {
+ // Validate our session with the provider if any
+ if (AZ::Interface::Get() != nullptr)
+ {
+ AzFramework::PlayerConnectionConfig config;
+ config.m_playerConnectionId = aznumeric_cast(connection->GetConnectionId());
+ config.m_playerSessionId = packet.GetTicket();
+ if(!AZ::Interface::Get()->ValidatePlayerJoinSession(config))
+ {
+ auto visitor = [](IConnection& connection) { connection.Disconnect(DisconnectReason::TerminatedByUser, TerminationEndpoint::Local); };
+ m_networkInterface->GetConnectionSet().VisitConnections(visitor);
+ return false;
+ }
+
+ reinterpret_cast(connection->GetUserData())->SetProviderTicket(packet.GetTicket().c_str());
+ }
+
+ return true;
+ }
+
bool MultiplayerSystemComponent::HandleRequest
(
AzNetworking::IConnection* connection,
@@ -587,12 +599,7 @@ namespace Multiplayer
if (connection->GetConnectionRole() == ConnectionRole::Connector)
{
AZLOG_INFO("New outgoing connection to remote address: %s", connection->GetRemoteAddress().GetString().c_str());
- AZ::CVarFixedString providerTicket;
- if (connection->GetUserData() != nullptr)
- {
- providerTicket = reinterpret_cast(connection->GetUserData())->GetProviderTicket();
- }
- connection->SendReliablePacket(MultiplayerPackets::Connect(0, providerTicket));
+ connection->SendReliablePacket(MultiplayerPackets::Connect(0));
}
else
{
diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h
index 0efef3ebe4..2a3fe73ff4 100644
--- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h
+++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.h
@@ -82,6 +82,7 @@ namespace Multiplayer
bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::Connect& packet);
bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::Accept& packet);
+ bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::ValidateSession& packet);
bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::ReadyForEntityUpdates& packet);
bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::SyncConsole& packet);
bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::ConsoleCommand& packet);