/// <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); }