Fixes to sending entity updates and entity rpcs within an environment set up for cross host entity migration
Signed-off-by: kberg-amzn <karlberg@amazon.com>
This commit is contained in:
@@ -40,8 +40,7 @@ namespace Multiplayer
|
||||
virtual EntityReplicationManager& GetReplicationManager() = 0;
|
||||
|
||||
//! Creates and manages sending updates to the remote endpoint.
|
||||
//! @param hostTimeMs current server game time in milliseconds
|
||||
virtual void Update(AZ::TimeMs hostTimeMs) = 0;
|
||||
virtual void Update() = 0;
|
||||
|
||||
//! Returns whether update messages can be sent to the connection.
|
||||
//! @return true if update messages can be sent
|
||||
|
||||
+4
-6
@@ -60,7 +60,7 @@ namespace Multiplayer
|
||||
const HostId& GetRemoteHostId() const;
|
||||
|
||||
void ActivatePendingEntities();
|
||||
void SendUpdates(AZ::TimeMs hostTimeMs);
|
||||
void SendUpdates();
|
||||
void Clear(bool forMigration);
|
||||
|
||||
bool SetEntityRebasing(NetworkEntityHandle& entityHandle);
|
||||
@@ -81,7 +81,7 @@ namespace Multiplayer
|
||||
|
||||
void AddDeferredRpcMessage(NetworkEntityRpcMessage& rpcMessage);
|
||||
|
||||
void AddAutonomousEntityReplicatorCreatedHandle(AZ::Event<NetEntityId>::Handler& handler);
|
||||
void AddAutonomousEntityReplicatorCreatedHandler(AZ::Event<NetEntityId>::Handler& handler);
|
||||
void AddSendMigrateEntityEventHandler(SendMigrateEntityEvent::Handler& handler);
|
||||
|
||||
bool HandleEntityMigration(AzNetworking::IConnection* invokingConnection, EntityMigrationMessage& message);
|
||||
@@ -120,10 +120,8 @@ namespace Multiplayer
|
||||
using EntityReplicatorList = AZStd::deque<EntityReplicator*>;
|
||||
EntityReplicatorList GenerateEntityUpdateList();
|
||||
|
||||
void SendEntityUpdatesPacketHelper(AZ::TimeMs hostTimeMs, EntityReplicatorList& toSendList, uint32_t maxPayloadSize, AzNetworking::IConnection& connection);
|
||||
|
||||
void SendEntityUpdates(AZ::TimeMs hostTimeMs);
|
||||
void SendEntityRpcs(RpcMessages& deferredRpcs, bool reliable);
|
||||
void SendEntityUpdateMessages(EntityReplicatorList& replicatorList);
|
||||
void SendEntityRpcs(RpcMessages& rpcMessages, bool reliable);
|
||||
|
||||
void MigrateEntityInternal(NetEntityId entityId);
|
||||
void OnEntityExitDomain(const ConstNetworkEntityHandle& entityHandle);
|
||||
|
||||
+1
@@ -66,6 +66,7 @@ namespace Multiplayer
|
||||
bool IsReadyToActivate() const;
|
||||
|
||||
NetworkEntityUpdateMessage GenerateUpdatePacket();
|
||||
void FinalizeSerialization(AzNetworking::PacketId sentId);
|
||||
|
||||
AZ::TimeMs GetResendTimeoutTimeMs() const;
|
||||
|
||||
|
||||
@@ -103,6 +103,7 @@ namespace Multiplayer
|
||||
// Non-serialized RPC metadata
|
||||
ReliabilityType m_isReliable = ReliabilityType::Reliable;
|
||||
};
|
||||
using NetworkEntityRpcVector = AZStd::fixed_vector<NetworkEntityRpcMessage, MaxAggregateRpcMessages>;
|
||||
|
||||
struct IRpcParamStruct
|
||||
{
|
||||
|
||||
@@ -118,4 +118,5 @@ namespace Multiplayer
|
||||
// This is to prevent blowing out stack memory if we declare an array of these EntityUpdateMessages
|
||||
AZStd::unique_ptr<AzNetworking::PacketEncodingBuffer> m_data;
|
||||
};
|
||||
using NetworkEntityUpdateVector = AZStd::fixed_vector<NetworkEntityUpdateMessage, MaxAggregateEntityMessages>;
|
||||
}
|
||||
|
||||
@@ -10,10 +10,14 @@
|
||||
|
||||
#include <Multiplayer/MultiplayerTypes.h>
|
||||
#include <Multiplayer/NetworkEntity/NetworkEntityHandle.h>
|
||||
#include <Multiplayer/NetworkEntity/NetworkEntityRpcMessage.h>
|
||||
#include <Multiplayer/NetworkEntity/NetworkEntityUpdateMessage.h>
|
||||
#include <AzCore/std/containers/map.h>
|
||||
|
||||
namespace Multiplayer
|
||||
{
|
||||
class EntityReplicator;
|
||||
|
||||
struct EntityReplicationData
|
||||
{
|
||||
EntityReplicationData() = default;
|
||||
@@ -21,6 +25,8 @@ namespace Multiplayer
|
||||
float m_priority = 0.0f;
|
||||
};
|
||||
using ReplicationSet = AZStd::map<ConstNetworkEntityHandle, EntityReplicationData>;
|
||||
using RpcMessages = AZStd::list<NetworkEntityRpcMessage>;
|
||||
using EntityReplicatorList = AZStd::deque<EntityReplicator*>;
|
||||
|
||||
class IReplicationWindow
|
||||
{
|
||||
@@ -33,6 +39,8 @@ namespace Multiplayer
|
||||
virtual uint32_t GetMaxProxyEntityReplicatorSendCount() const = 0;
|
||||
virtual bool IsInWindow(const ConstNetworkEntityHandle& entityPtr, NetEntityRole& outNetworkRole) const = 0;
|
||||
virtual void UpdateWindow() = 0;
|
||||
virtual AzNetworking::PacketId SendEntityUpdateMessages(NetworkEntityUpdateVector& entityUpdateVector) = 0;
|
||||
virtual void SendEntityRpcs(NetworkEntityRpcVector& entityRpcVector, bool reliable) = 0;
|
||||
virtual void DebugDraw() const = 0;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user