public static FrameList DeserializeFrameList(BaseNetworkObjectListManager listManager, FrameList previousFrames, NetworkObjectListFrameListUpdate frameListMessage) { var frameList = new FrameList(); foreach (var frameMessage in frameListMessage.Frames) { if (listManager.InternalFindListById((int)frameMessage.ListId) == null) { throw new InvalidOperationException($"List with id {frameMessage.ListId} does not exist"); } var previousFrame = previousFrames?.FindFrameByListId((int)frameMessage.ListId); frameList.AddFrame(Frame.Deserialize(frameMessage, listManager.TypeRegistry, previousFrame)); } return(frameList); }
/// <summary> /// Serializes all frames to a message /// </summary> /// <param name="objectListManager"></param> /// <param name="previousFrames"></param> public NetworkObjectListFrameListUpdate SerializeFrames(BaseNetworkObjectListManager objectListManager, FrameList previousFrames) { var frameListMessage = new NetworkObjectListFrameListUpdate(); foreach (var frame in _frames) { var objectList = objectListManager.InternalFindListById(frame.ListId); var previousFrame = previousFrames?.FindFrameByListId(frame.ListId); var result = frame.Serialize(objectList, previousFrame); //TODO: check if anything was written to allow discarding of empty frames frameListMessage.Frames.Add(result); } return(frameListMessage); }