示例#1
0
        /// <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;
            }
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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);
        }