We, at inLoop VR, spent the last couple of months developing our own Online subsystem implementation only to find out that REPLICATION for unique IDs (and FNames) for a custom subsystem which is implemented via plugin is broken in latest engine version (4.20). We discovered this while trying to connect a client to an instance of a dedicated server: the first message (Login) to attempt to serialize a custom UniqueId fails on deserialization on the server side. We traced the problem to the fact that because the default subsystem (in our case) was set to inLoop, the server could not deserialize the subsystem name (FName) that the client ATTEMPTED (I, underline “attempted”) to pass over the wire. It seems that in the current state, the UniqueId implementation for a subsystem requires one to return the subsystem name in GetType() method. However, this will never be serialized properly unless the type is defined in FOnlineSubsystemUtils, which cannot be modified without modifying engine code (not optimal).
Proposed Solution A: Allow us to checkin our OnlineSubsystem definition into the current branch. We are planning to package the full version of our OnlineSubsystem later, but this will suffice for now as we will be loading our code via the Plugin interface. (we would like to avoid maintaining a separate engine branch just for this change.)
Proposed Solution B: modify I OnlineSubsystemUtils to allow implementers to register subsystem names via Plugin interface.
We can provide code for both solutions. Please reply to our email for further discussion.