[Iris] Why are NetSerializers so complex?

OK! This is great Peter, the support staff should definitely turn all this into a Knowledge article at some point.

For default serializing - do they abide by the UPROPERTY(Getter=X,Setter=Y) functions? Depending on what FProperty functions you guys call to set/get the data they might.

Server

?) Before Quantize, does iris make/have a shadow copy of the data to determine if it has changed?

2) Iris/Custom NetSerializer Quantizes the data, when we Dequantize later, we’re writing to a shadow copy of the structure type. When we quantize, are we reading the real structure, or are we reading from the shadow copy?

3) Iris/Custom NetSerializer Serializes the quantized data onto a buffer for the connection

Client

1) There is a shadow copy here as well of the target data, yes?

2) Iris/Custom NetSerializer Deserialize the data, from network stream to quantized type buffer.

3) Iris/Custom NetSerializer Dequantizes the data, from the quantized packed form into the source type.

4) Iris/Custom NetSerializer APPLY the data, if your net serializer fails to implement Apply, your data will copied across the struct from the shadow copy, but only the replicated UProperties correct?

With Iris’s Shadow copy, do you only copy/compare serializable properties by default? e.g. if i have non-uproperties on the structure are they in danger? I absolutely assume my non-uproperties are not in any danger, but I figured better to ask.

The MC delegate originally wasn’t marked as NotReplicated because well, I had a custom NetSerialize function, but also, DynamicDelegates are not network serializable, or at least weren’t, so it was always implied. But like most things with Iris, I suppose I need to be more explicit?

> Another way is using arrays, sort them when needed and use binary search algorithms to find the element. If coupled with a FastArray you also get minimal replication.

Yeah - but without the ability to nest FastArrays inside structures it really limits the ability to make reuseable structures/patterns.

> SupportsStructNetSerializerList

I’m using this for a few things, mostly related to the ability system like base engine. I noticed yall decided not to implement a custom net serializer for FGameplayCueParameters, it does a bunch of work internally to only replicate minimal state compared to the default values of each property.

Are you not bothering because that is now a standard capability of the default iris structure serializer? I found some comment in the code that seems to indicate something along those lines at the cost of 1 bit per property?