Commit Graph

99 Commits

Author SHA1 Message Date
mattias hornlund
13826fcfd5 Iris
- Fixed assert in ReplicationWriter

#rb Peter.Engstrom

[CL 28342160 by mattias hornlund in ue5-main branch]
2023-09-29 10:31:03 -04:00
mattias hornlund
228791254f Iris
- Added support for sending attachments flagged as SendImmediate from PostDispatchTick

#jira UE-122456
#rb Peter.Engstrom

[CL 28318795 by mattias hornlund in ue5-main branch]
2023-09-28 10:58:24 -04:00
peter engstrom
fe6ca60113 Iris - Multiple huge objects support.
The max number of huge objects in transit is controlled via the cvar net.Iris.ReplicationWriterMaxHugeObjectsInTransit, defaulting to 16, but will be at least one. There's a tradeoff mainly between the connection characteristics to support and normal object replication scheduling when tweaking this value. On one hand you don't want to end up stalling object replication because the top priority objects are huge. So you want to be able to keep replicating huge objects during the maximum latency, including latency variation, and packet loss scenarios you want to provide the best experience possible for. On the other hand object deletion cannot be performed once the object is in the huge object queue. Consider this and how long time it will take to replicate the huge object queue depending on the average payload of a huge object.

#jira UE-123370
#rb mattias.hornlund

[CL 28283681 by peter engstrom in ue5-main branch]
2023-09-27 14:19:10 -04:00
mattias hornlund
02114941b3 Iris
-Added CVar to allow for additonal data packets to be written by ReplicationWriter as long as bandwidth settings are respected

#rb Peter.Engstrom

[CL 28136556 by mattias hornlund in ue5-main branch]
2023-09-22 10:55:20 -04:00
louisphilippe seguin
320f31002c Iris
* Split scope bitarray into GlobalScopeList and ScopeFrameData
* The GlobalScopeList is always up to date and should mostly be used outside the NetTickFlush update
* ScopeFrameData is synced at the start of NetTickFlush and valid until the end of the SendUpdate().
* The lists contained in ScopeFrameData are now protected from illegal access outside of NetTickFlush
* Added ensures that prevents creating new replicated root object during the SendUpdate operations.
* Added ensures that prevent changing filter conditions during the SendUpdate operations.
* Added support for replication of subobjects created inside a PreReplication callback.

#jira UE-195717
#rb Mattias.Hornlund, Peter.Engstrom
#rnx

[CL 28100078 by louisphilippe seguin in ue5-main branch]
2023-09-21 15:36:01 -04:00
peter engstrom
db5e67e89a Iris - Implement support for NetSerializer::Apply which if implemented will be called when pushing received state to the target state. RepMovementNetSerializer makes use of the new functionality to avoid overwriting quantization levels.
#rb louisphilippe.seguin, mattias.hornlund

[CL 28099891 by peter engstrom in ue5-main branch]
2023-09-21 15:33:57 -04:00
louisphilippe seguin
5f5608d185 Iris
* Move PreUpdate into its own loop and call it on all polling objects.
* Properly manage objects that set dirtyness on other objects inside PreUpdate/PreReplication
   * Now objects that get set dirty inside PreReplication but are not set to be polled will still be set dirty on the next frame.
* Deleted code that tested if such dependencies existed

#jira UE-192518, FORT-639953
#rb Peter.Engstrom
#rnx

[CL 27955686 by louisphilippe seguin in ue5-main branch]
2023-09-18 09:25:23 -04:00
steve robb
da9f5a828a Replaced TChooseClass with std::conditional_t.
#rb none
#jira UE-195271

[CL 27816205 by steve robb in ue5-main branch]
2023-09-12 19:55:55 -04:00
louisphilippe seguin
15e7786970 Iris
* Iris creation data will now replicate the true Outer of replicated subobjects.
* Refactored CallWriteNetRefHandleCreationInfo and made CallWriteNetRefHandleDestructionInfo.

#jira UE-127405, FORT-650140, FORT-650133, FORT-650141
#rb Mattias.Hornlund
#rnx

[CL 27798306 by louisphilippe seguin in ue5-main branch]
2023-09-12 13:20:56 -04:00
peter engstrom
ecc9028539 Iris - COND_SkipReplay properties are now treated as having a lifetime condition. Added missing tests for various lifetimeconditions.
#rnx
#rb mattias.hornlund

[CL 27627972 by peter engstrom in ue5-main branch]
2023-09-06 04:19:40 -04:00
peter engstrom
3283d0c1d3 Iris - Allow sending dynamic objects in SoftObjectPtr.
#rb mattias.hornlund

[CL 27408909 by peter engstrom in ue5-main branch]
2023-08-28 08:18:13 -04:00
mattias hornlund
6b55a9269d Iris
- Added friend declaration for inlined subclass to comply with recent compilers.

#rb Peter.Engstrom

[CL 27407575 by mattias hornlund in ue5-main branch]
2023-08-28 05:06:22 -04:00
mattias hornlund
797dde7c6b Iris
- Implemented initial support for being able to skip over data for objects that fail to be instantiated

#rb Peter.Engstrom

[CL 27371360 by mattias hornlund in ue5-main branch]
2023-08-25 05:15:41 -04:00
peter engstrom
827ee7fe12 Iris - Fix EnumNetSerializer issue with enum out of bounds values. Fixed tests to use same config init path as the serializer.
#rb mattias.hornlund

[CL 27371141 by peter engstrom in ue5-main branch]
2023-08-25 04:59:58 -04:00
peter engstrom
19d4cd9085 Do not depend on binaries that do not exist.
#rnx
#rb ryan.gerleve

[CL 27276147 by peter engstrom in ue5-main branch]
2023-08-22 12:53:31 -04:00
peter engstrom
9461712637 Iris - Added missing prioritzation calls in test.
#rb trivial
#rnx

[CL 27029437 by peter engstrom in ue5-main branch]
2023-08-11 11:21:20 -04:00
peter engstrom
f24f343ee6 Iris - SphereNetObjectPrioritizer tests
#rnx
#rb mattias.hornlund

[CL 27027451 by peter engstrom in ue5-main branch]
2023-08-11 10:27:18 -04:00
mattias hornlund
443dcb37d3 Iris 1/2
- Fixed issue with gameplay code holding stale handles to NetObjectGroups after restarting ReplicationSystem due to HotFix.
- Added epoch to NetObjectGroupHandles to be able to detect stale groups

#rb Peter.Engstrom

[CL 27027060 by mattias hornlund in ue5-main branch]
2023-08-11 10:12:29 -04:00
peter engstrom
73988aea51 Iris - Fix out of bounds read in test.
#rnx
#rb mattias.hornlund

[CL 26950135 by peter engstrom in ue5-main branch]
2023-08-09 03:18:28 -04:00
mattias hornlund
c26ea73d8b Iris
- Fixed issue with tearoff of actor with subobject triggering ensure
- Added test recreating the bug
- Added Description string parameter to FReplicationSystemTestNode packet sending methods to facilitate logging of more context when writing tests

#rb LouisPhilippe.Sequin

[CL 26484577 by mattias hornlund in ue5-main branch]
2023-07-20 09:40:06 -04:00
mattias hornlund
b832289865 Fixed issue where FNetBitArray::FindLastZero would return index out of bounds for array sizes not aligned with the size of the storage.
#rb LouisPhilippe.Seguin

[CL 26462362 by mattias hornlund in ue5-main branch]
2023-07-19 11:39:17 -04:00
louisphilippe seguin
a45acac5be Iris
* Poll configs are now set using Frequency (updates per second) instead of frames between polls.
* This allows the poll configs to work with any type of server tick rate
* Added ability to recover a given object's poll frequency via GetPollFrequencyOfRootObject
* ActorReplicationBridge will now listen to changes in server tick rates and reinitalize the poll frame updates of all objects via ReinitPollFrequency()

#jira UE-185786
#rb Peter.Engstorm
#rnx

[CL 25894242 by louisphilippe seguin in ue5-main branch]
2023-06-09 11:12:03 -04:00
louisphilippe seguin
8b3d0a80e5 Iris
* Formalize the concept of ForceNetUpdate by splitting MarkDirty and ForceNetUpdate into seperate lists.
* Now dirty objects will not be forced to be polled immediately anymore. It's only if you call ForceNetUpdate that you can skip your polling frequency.
* Another exeception is when a subobject gets added to a root object. There we are forcing a call to ForceNetUpdate.
* Added code to ensure that only the currently updated object can be marked dirty during the poll phase.

#jira UE-181952
#rb Peter.Engstorm, Mattias.Hornlund
#rnx

[CL 25814811 by louisphilippe seguin in ue5-main branch]
2023-06-06 09:49:57 -04:00
peter engstrom
86abf30e18 Iris - Store FName strings, when required, as they were. To prevent default state checksum mismatch the serialization is a no-op when serializing default state. Equality check will ignore casing.
#preflight 647752964b0d5a1eb13e073f
#rb louisphilippe.seguin

[CL 25702752 by peter engstrom in ue5-main branch]
2023-05-31 11:09:10 -04:00
steve robb
ba1fe48aca Preparation for deprecating the hashing arrays and strings by pointer - now you have to be explicit and call the right function for hashing a pointer, hashing an array contents or hashing a TCHAR* pointer as a null-terminated string.
Added GetArrayHash() for hashing arrays by their contents.
Added a new pair of keyfuncs for TSets and TMaps which allow TCHAR* keys (or TCHAR* values passed to *ByHash functions) to be hashed by FCrc::Strihash_DEPRECATED().

#rb devin.doucette
#preflight 64708e7c296b2b37c6fd894a

[CL 25647216 by steve robb in ue5-main branch]
2023-05-26 12:51:39 -04:00