/// <summary> /// Reads from a DarkRift reader and updates the given instance (which has to implement ISync) and as tag it uses the parameter tag /// </summary> /// <param name="sync"></param> /// <param name="reader"></param> /// <param name="tag"></param> public static void ReadSerializableSmart(this ISync sync, DarkRiftReader reader, int tag) { ExtraSyncData _extraSyncData = (ExtraSyncData)reader.ReadByte(); int _typeID; int _tag; switch (_extraSyncData) { case ExtraSyncData.Nothing: sync.DeserializeOptional(reader, tag); break; case ExtraSyncData.TypeID: _typeID = reader.ReadInt32(); sync.DeserializeOptional(reader, tag); break; case ExtraSyncData.Tag: _tag = reader.ReadInt32(); sync.DeserializeOptional(reader, tag); break; case ExtraSyncData.TypeIDANDTag: _typeID = reader.ReadInt32(); _tag = reader.ReadInt32(); sync.DeserializeOptional(reader, tag); break; } }
/// <summary> /// Reads from a DarkRift reader and creates a new instance of the type written in the buffer (which has to implement ISync) and as tag it uses the parameter tag /// </summary> /// <param name="reader">The DarkRift reader to read from</param> /// <param name="tag">The tag to use in DeserializeOptional</param> /// <returns></returns> public static ISync ReadSerializableSmart(this DarkRiftReader reader, int tag) { ExtraSyncData _extraSyncData = (ExtraSyncData)reader.ReadByte(); ISync _syncObject = default; int _typeID; int _tag; switch (_extraSyncData) { case ExtraSyncData.Nothing: Console.WriteLine("No TypeID provided!"); break; case ExtraSyncData.TypeID: _typeID = reader.ReadInt32(); _syncObject = (ISync)Activator.CreateInstance(MLAPI.SyncTypes[_typeID]); _syncObject.DeserializeOptional(reader, tag); break; case ExtraSyncData.Tag: Console.WriteLine("No TypeID provided!"); break; case ExtraSyncData.TypeIDANDTag: _typeID = reader.ReadInt32(); _tag = reader.ReadInt32(); _syncObject = (ISync)Activator.CreateInstance(MLAPI.SyncTypes[_typeID]); _syncObject.DeserializeOptional(reader, tag); break; } return(_syncObject); }
/// <summary> /// Writes in a DarkRiftWriter the given ISync instance, the typeID, if wanted and the tag, if wanted. Calls SerializeOptional using tag (default = -1) /// </summary> /// <param name="writer">The DarRiftWriter to write in</param> /// <param name="sync">The ISync instance to write</param> /// <param name="extraSyncData">The way to handle extra data to send</param> /// <param name="tag">The tag to use in SerializeOptional (and to send if you want)</param> public static void WriteSmart(this DarkRiftWriter writer, ISync sync, ExtraSyncData extraSyncData, int tag = -1) { writer.Write((byte)extraSyncData); switch (extraSyncData) { case ExtraSyncData.TypeID: writer.Write(sync.TypeID); break; case ExtraSyncData.Tag: writer.Write(tag); break; case ExtraSyncData.TypeIDANDTag: writer.Write(sync.TypeID); writer.Write(tag); break; } sync.SerializeOptional(writer, tag); }
/// <summary> /// Reads from a DarkRift reader and creates a new instance of a given type T (which has to implement ISync) and as tag it uses the parameter tag /// </summary> /// <typeparam name="T">The I/O type</typeparam> /// <param name="reader">The DarkRift reader to read from</param> /// <param name="tag">The tag to use in DeserializeOptional</param> /// <returns></returns> public static T ReadSerializableSmart <T>(this DarkRiftReader reader, int tag) where T : ISync, new() { ExtraSyncData _extraSyncData = (ExtraSyncData)reader.ReadByte(); T _syncObject = default; int _typeID; int _tag; switch (_extraSyncData) { case ExtraSyncData.Nothing: _syncObject = (T)Activator.CreateInstance(typeof(T)); _syncObject.DeserializeOptional(reader, tag); break; case ExtraSyncData.TypeID: _typeID = reader.ReadInt32(); _syncObject = (T)Activator.CreateInstance(typeof(T)); _syncObject.DeserializeOptional(reader, tag); break; case ExtraSyncData.Tag: _tag = reader.ReadInt32(); _syncObject = (T)Activator.CreateInstance(typeof(T)); _syncObject.DeserializeOptional(reader, tag); break; case ExtraSyncData.TypeIDANDTag: _typeID = reader.ReadInt32(); _tag = reader.ReadInt32(); _syncObject = (T)Activator.CreateInstance(typeof(T)); _syncObject.DeserializeOptional(reader, tag); break; } return(_syncObject); }