Beispiel #1
0
        /// <summary>
        /// Deserializes a compatibility settings block.
        /// </summary>
        /// <param name="serializedData">The serialized data.</param>
        /// <param name="settings">The settings.</param>
        /// <returns>The deserialization result.</returns>
        private static DeserializationResult DeserializeCompatibilitySettings(BinaryData serializedData, Settings settings)
        {
            if (serializedData == null || serializedData.Left == 0)
            {
                return(DeserializationResult.EndOfData);
            }

            Log.DevDebug(typeof(BinarySettings), "DeserializeCompatibilitySettings", applySettings);

            serializedData.ResetLocalCheckSum();

            SettingsType settingsType = serializedData.GetSettingsType();

            if (settingsType != SettingsType.Compatibility)
            {
                throw new InvalidOperationException("Not a compatibility settings block");
            }

            ulong version = serializedData.GetVersion();

            if (version > 0)
            {
                Log.Warning(typeof(BinarySettings), "DeserializeCompatibilitySettings", "Serialized data version too high", version, 0);
                return(DeserializationResult.Error);
            }

            // Settings.
            ServiceDispatcherSettings.Allowance reflectionAllowance = serializedData.GetAllowance();
            bool blockTransferManagerOffers = serializedData.GetBool();

            ServiceDispatcherSettings.ModCompatibilityMode assignmentCompatibilityMode = serializedData.GetModCompatibilityMode();
            ServiceDispatcherSettings.ModCompatibilityMode creationCompatibilityMode   = serializedData.GetModCompatibilityMode();

            serializedData.CheckLocalCheckSum();

            // Only use these settings if no settings file was loaded.
            if (!settings.Loaded)
            {
                Log.Debug(typeof(BinarySettings), "DeserializeCompatibilitySettings", applySettings, reflectionAllowance, blockTransferManagerOffers, assignmentCompatibilityMode, creationCompatibilityMode);

                if (applySettings)
                {
                    settings.ReflectionAllowance         = reflectionAllowance;
                    settings.BlockTransferManagerOffers  = blockTransferManagerOffers;
                    settings.AssignmentCompatibilityMode = assignmentCompatibilityMode;
                    settings.CreationCompatibilityMode   = creationCompatibilityMode;
                }
            }

            return(DeserializationResult.Success);
        }