Merge pull request #4431 from aws-lumberyard-dev/mp_handshake_conndata
Move handshake check to connection data
This commit is contained in:
@@ -6,16 +6,25 @@ namespace {{ xml.attrib['Name'] }}
|
||||
{
|
||||
switch (aznumeric_cast<int32_t>(packetHeader.GetPacketType()))
|
||||
{
|
||||
{% set packet_ns = namespace(handshake=false) %}
|
||||
{% for Packet in xml.iter('Packet') %}
|
||||
{% if ('HandshakePacket' in Packet.attrib) and (Packet.attrib['HandshakePacket']|booleanTrue == true) %}
|
||||
{% set packet_ns.handshake = True %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% for Packet in xml.iter('Packet') %}
|
||||
case aznumeric_cast<int32_t>({{ Packet.attrib['Name'] }}::Type):
|
||||
{
|
||||
AZLOG(Debug_DispatchPackets, "Received packet %s", "{{ Packet.attrib['Name'] }}");
|
||||
{% if ('HandshakePacket' not in Packet.attrib) or (Packet.attrib['HandshakePacket'] == 'false') %}
|
||||
if (!handler.IsHandshakeComplete())
|
||||
{% if packet_ns.handshake %}
|
||||
{% if ('HandshakePacket' not in Packet.attrib) or (Packet.attrib['HandshakePacket'] == 'false') %}
|
||||
if (!handler.IsHandshakeComplete(connection))
|
||||
{
|
||||
return AzNetworking::PacketDispatchResult::Skipped;
|
||||
}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{{ Packet.attrib['Name'] }} packet;
|
||||
if (!serializer.Serialize(packet, "Packet"))
|
||||
|
||||
@@ -49,5 +49,13 @@ namespace Multiplayer
|
||||
//! Sets the state of connection whether update messages can be sent or not.
|
||||
//! @param canSendUpdates the state value
|
||||
virtual void SetCanSendUpdates(bool canSendUpdates) = 0;
|
||||
|
||||
//! Fetches the state of connection whether handshake logic has completed
|
||||
//! @return true if handshake has completed
|
||||
virtual bool DidHandshake() const = 0;
|
||||
|
||||
//! Sets the state of connection whether handshake logic has completed
|
||||
//! @param didHandshake if handshake logic has completed
|
||||
virtual void SetDidHandshake(bool didHandshake) = 0;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -33,6 +33,8 @@ namespace Multiplayer
|
||||
void Update() override;
|
||||
bool CanSendUpdates() const override;
|
||||
void SetCanSendUpdates(bool canSendUpdates) override;
|
||||
bool DidHandshake() const override;
|
||||
void SetDidHandshake(bool didHandshake) override;
|
||||
//! @}
|
||||
|
||||
const AZStd::string& GetProviderTicket() const;
|
||||
@@ -43,6 +45,7 @@ namespace Multiplayer
|
||||
AZStd::string m_providerTicket;
|
||||
AzNetworking::IConnection* m_connection = nullptr;
|
||||
bool m_canSendUpdates = true;
|
||||
bool m_didHandshake = false;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -27,4 +27,14 @@ namespace Multiplayer
|
||||
{
|
||||
m_providerTicket = ticket;
|
||||
}
|
||||
|
||||
inline bool ClientToServerConnectionData::DidHandshake() const
|
||||
{
|
||||
return m_didHandshake;
|
||||
}
|
||||
|
||||
inline void ClientToServerConnectionData::SetDidHandshake(bool didHandshake)
|
||||
{
|
||||
m_didHandshake = didHandshake;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,8 @@ namespace Multiplayer
|
||||
void Update() override;
|
||||
bool CanSendUpdates() const override;
|
||||
void SetCanSendUpdates(bool canSendUpdates) override;
|
||||
bool DidHandshake() const override;
|
||||
void SetDidHandshake(bool didHandshake) override;
|
||||
//! @}
|
||||
|
||||
NetworkEntityHandle GetPrimaryPlayerEntity();
|
||||
@@ -52,6 +54,7 @@ namespace Multiplayer
|
||||
AZStd::string m_providerTicket;
|
||||
AzNetworking::IConnection* m_connection = nullptr;
|
||||
bool m_canSendUpdates = false;
|
||||
bool m_didHandshake = false;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -38,4 +38,14 @@ namespace Multiplayer
|
||||
{
|
||||
m_providerTicket = ticket;
|
||||
}
|
||||
|
||||
inline bool ServerToClientConnectionData::DidHandshake() const
|
||||
{
|
||||
return m_didHandshake;
|
||||
}
|
||||
|
||||
inline void ServerToClientConnectionData::SetDidHandshake(bool didHandshake)
|
||||
{
|
||||
m_didHandshake = didHandshake;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,6 @@ namespace Multiplayer
|
||||
MultiplayerEditorConnection();
|
||||
~MultiplayerEditorConnection() = default;
|
||||
|
||||
bool IsHandshakeComplete() const { return true; };
|
||||
bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerEditorPackets::EditorServerInit& packet);
|
||||
bool HandleRequest(AzNetworking::IConnection* connection, const AzNetworking::IPacketHeader& packetHeader, MultiplayerEditorPackets::EditorServerReady& packet);
|
||||
|
||||
|
||||
@@ -446,9 +446,9 @@ namespace Multiplayer
|
||||
MultiplayerPackets::SyncConsole m_syncPacket;
|
||||
};
|
||||
|
||||
bool MultiplayerSystemComponent::IsHandshakeComplete() const
|
||||
bool MultiplayerSystemComponent::IsHandshakeComplete(AzNetworking::IConnection* connection) const
|
||||
{
|
||||
return m_didHandshake;
|
||||
return reinterpret_cast<IConnectionData*>(connection->GetUserData())->DidHandshake();
|
||||
}
|
||||
|
||||
bool MultiplayerSystemComponent::HandleRequest
|
||||
@@ -475,7 +475,7 @@ namespace Multiplayer
|
||||
|
||||
if (connection->SendReliablePacket(MultiplayerPackets::Accept(sv_map)))
|
||||
{
|
||||
m_didHandshake = true;
|
||||
reinterpret_cast<ServerToClientConnectionData*>(connection->GetUserData())->SetDidHandshake(true);
|
||||
|
||||
// Sync our console
|
||||
ConsoleReplicator consoleReplicator(connection);
|
||||
@@ -492,7 +492,7 @@ namespace Multiplayer
|
||||
[[maybe_unused]] MultiplayerPackets::Accept& packet
|
||||
)
|
||||
{
|
||||
m_didHandshake = true;
|
||||
reinterpret_cast<ClientToServerConnectionData*>(connection->GetUserData())->SetDidHandshake(true);
|
||||
AZ::CVarFixedString commandString = "sv_map " + packet.GetMap();
|
||||
AZ::Interface<AZ::IConsole>::Get()->PerformCommand(commandString.c_str());
|
||||
AZ::CVarFixedString loadLevelString = "LoadLevel " + packet.GetMap();
|
||||
|
||||
@@ -76,7 +76,7 @@ namespace Multiplayer
|
||||
int GetTickOrder() override;
|
||||
//! @}
|
||||
|
||||
bool IsHandshakeComplete() const;
|
||||
bool IsHandshakeComplete(AzNetworking::IConnection* connection) const;
|
||||
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::ReadyForEntityUpdates& packet);
|
||||
@@ -171,7 +171,6 @@ namespace Multiplayer
|
||||
double m_serverSendAccumulator = 0.0;
|
||||
float m_renderBlendFactor = 0.0f;
|
||||
float m_tickFactor = 0.0f;
|
||||
bool m_didHandshake = false;
|
||||
bool m_spawnNetboundEntities = true;
|
||||
|
||||
#if !defined(AZ_RELEASE_BUILD)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#include <AzFramework/Components/TransformComponent.h>
|
||||
#include <AzTest/AzTest.h>
|
||||
#include <Multiplayer/Components/NetBindComponent.h>
|
||||
#include <NetworkEntity/EntityReplication/EntityReplicator.h>
|
||||
#include <Multiplayer/NetworkEntity/EntityReplication/EntityReplicator.h>
|
||||
|
||||
namespace Multiplayer
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user