/// <summary> /// Deseralizes the specified serialized data. /// </summary> /// <param name="serializedData">The serialized data.</param> /// <param name="settings">The settings.</param> /// <returns>True if any settings were applied.</returns> public static bool Deseralize(BinaryData serializedData, Settings settings) { if (serializedData.Left == 0) { return(false); } bool applied = false; try { Log.Debug(typeof(BinarySettings), "Deserialize", applySettings); // Data version. ulong version = serializedData.GetVersion(); // Build version and stamp. Version assemblyVersion = serializedData.GetAssemblyVersion(); long ticks = serializedData.GetLong(); if (version > 0) { try { Log.Warning(typeof(BinarySettings), "Deserialize", "Serialized data version too high", version, 0, assemblyVersion, new DateTime(ticks).ToString("yyyy-MM-dd HH:mm")); } catch { Log.Warning(typeof(BinarySettings), "Deserialize", "Serialized data version too high", version, 0); } return(applied); } try { Log.DevDebug(typeof(BinarySettings), "Deserialize", version, assemblyVersion, new DateTime(ticks).ToString("yyyy-MM-dd HH:mm")); } catch { } // Blocks. while (DeserializeBlock(serializedData, settings) == DeserializationResult.Success) { applied = applySettings; } ; if (applied && !settings.Loaded) { settings.LoadSettingsPerCity = true; } } catch (Exception ex) { Log.Error(typeof(BinarySettings), "Deserialize", ex); } return(applied); }
/// <summary> /// Deserializes the specified serialized data to this instance. /// </summary> /// <param name="serializedData">The serialized data.</param> /// <returns> /// The deserialization result. /// </returns> private SerializableSettings.DeserializationResult Deserialize(SerializableSettings.BinaryData serializedData) { if (serializedData == null || serializedData.Left == 0) { return(SerializableSettings.DeserializationResult.EndOfData); } serializedData.ResetLocalCheckSum(); ulong version = serializedData.GetVersion(); if (version > 0) { Log.Warning(this, "Deserialize", "Serialized data version too high!", version, 0); return(SerializableSettings.DeserializationResult.Error); } this.VehicleId = serializedData.GetUshort(); this.targetBuildingId = serializedData.GetUshort(); this.dispatcherType = serializedData.GetDispatcherType(); this.checkFlags = serializedData.GetVehicleFlags(); this.checkFlagPosition = serializedData.GetVector3(); this.checkFlagSinceFrame = serializedData.GetUint(); this.checkFlagSinceTime = serializedData.GetDouble(); this.confusedDeAssignedSinceFrame = serializedData.GetUint(); this.confusedSinceFrame = serializedData.GetUint(); this.confusedSinceTime = serializedData.GetDouble(); this.lostSinceFrame = serializedData.GetUint(); this.lostSinceTime = serializedData.GetDouble(); this.lostReason = serializedData.GetLostReason(); serializedData.CheckLocalCheckSum(); return(SerializableSettings.DeserializationResult.Success); }
/// <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); }
/// <summary> /// Deserializes the automatic emptying building list. /// </summary> /// <param name="serializedData">The serialized data.</param> public void DeserializeStuckVehicles(SerializableSettings.BinaryData serializedData) { if (serializedData.Left == 0) { return; } try { ulong version = serializedData.GetVersion(); if (version > 0) { Log.Warning(this, "DeserializeStuckVehicles", "Serialized data version too high!", version, 0); return; } if (serializedData.Left == 0 || this.StuckVehicles == null) { return; } StuckVehicleInfo vehicle; SerializableSettings.DeserializationResult result; while ((result = StuckVehicleInfo.Deserialize(serializedData, out vehicle)) == SerializableSettings.DeserializationResult.Success) { this.StuckVehicles[vehicle.VehicleId] = vehicle; } if (result == SerializableSettings.DeserializationResult.Error) { this.StuckVehicles.Clear(); } else if (Log.LogALot) { Log.DevDebug(this, "DeserializeStuckVehicles", this.StuckVehicles.Count, String.Join(" | ", this.StuckVehicles.Values.OrderBy(v => v.VehicleId).SelectToArray(v => "[" + v.ToString() + "]"))); } } catch (Exception ex) { Log.Error(this, "DeserializeStuckVehicles", ex); if (this.StuckVehicles != null) { this.StuckVehicles.Clear(); } } }
/// <summary> /// Deserializes a service range settings block. /// </summary> /// <param name="serializedData">The serialized data.</param> /// <param name="settings">The settings.</param> /// <returns>The deserialization result.</returns> private static DeserializationResult DeserializeRangeSettings(BinaryData serializedData, Settings settings) { if (serializedData == null || serializedData.Left == 0) { return(DeserializationResult.EndOfData); } Log.DevDebug(typeof(BinarySettings), "DeserializeRangeSettings", applySettings); serializedData.ResetLocalCheckSum(); SettingsType settingsType = serializedData.GetSettingsType(); if (settingsType != SettingsType.ServiceRanges) { throw new InvalidOperationException("Not a service range settings block"); } ulong version = serializedData.GetVersion(); if (version > 0) { Log.Warning(typeof(BinarySettings), "DeserializeRangeSettings", "Serialized data version too high", version, 0); return(DeserializationResult.Error); } // Settings. bool rangeLimit = serializedData.GetBool(); float rangeMaximum = serializedData.GetFloat(); float rangeMinimum = serializedData.GetFloat(); float rangeModifier = serializedData.GetFloat(); serializedData.CheckLocalCheckSum(); Log.Debug(typeof(BinarySettings), "DeserializeRangeSettings", applySettings, rangeLimit, rangeMaximum, rangeMinimum, rangeModifier); if (applySettings) { settings.RangeLimit = rangeLimit; settings.RangeMaximum = rangeMaximum; settings.RangeMinimum = rangeMinimum; settings.RangeModifier = rangeModifier; } return(DeserializationResult.Success); }
/// <summary> /// Deserializes a standard service settings block. /// </summary> /// <param name="serializedData">The serialized data.</param> /// <param name="settings">The settings.</param> /// <returns>The deserialization result.</returns> private static DeserializationResult DeserializeStandardServiceSettings(BinaryData serializedData, Settings settings) { if (serializedData == null || serializedData.Left == 0) { return(DeserializationResult.EndOfData); } Log.DevDebug(typeof(BinarySettings), "DeserializeStandardServiceSettings", applySettings); serializedData.ResetLocalCheckSum(); SettingsType settingsType = serializedData.GetSettingsType(); if (settingsType != SettingsType.StandardService) { throw new InvalidOperationException("Not a standard service settings block"); } ulong version = serializedData.GetVersion(); if (version > 0) { Log.Warning(typeof(BinarySettings), "DeserializeStandardServiceSettings", "Serialized data version too high", version, 0); return(DeserializationResult.Error); } StandardServiceSettings serviceSettings; StandardServiceSettings serializedSettings; ServiceType service = serializedData.GetServiceType(); switch (service) { case ServiceType.DeathCare: serviceSettings = settings.DeathCare; break; case ServiceType.Garbage: serviceSettings = settings.Garbage; break; case ServiceType.HealthCare: serviceSettings = settings.HealthCare; break; default: Log.Warning(typeof(BinarySettings), "Not a standard service", service); serviceSettings = null; break; } serializedSettings = new StandardServiceSettings(serviceSettings); // Settings. serializedSettings.DispatchVehicles = serializedData.GetBool(); serializedSettings.DispatchByDistrict = serializedData.GetBool(); serializedSettings.DispatchByRange = serializedData.GetBool(); serializedSettings.AutoEmpty = serializedData.GetBool(); serializedSettings.LimitOpportunisticCollection = serializedData.GetBool(); serializedSettings.RemoveFromGrid = serializedData.GetBool(); serializedSettings.IgnoreRangeUseClosestBuildings = serializedData.GetByte(); serializedSettings.CreateSpares = serializedData.GetSpareVehiclesCreation(); serializedSettings.ChecksPreset = serializedData.GetBuildingCheckOrder(); serializedSettings.MinimumAmountForDispatch = serializedData.GetUshort(); serializedSettings.MinimumAmountForPatrol = serializedData.GetUshort(); serializedSettings.AutoEmptyStartLevelPercent = serializedData.GetByte(); serializedSettings.AutoEmptyStopLevelPercent = serializedData.GetByte(); // Custom check list. byte checksCustomLength = serializedData.GetByte(); serializedSettings.ChecksCustom = serializedData.GetBuildingCheckParametersArray(checksCustomLength); serializedData.CheckLocalCheckSum(); if (serviceSettings != null) { Log.Debug(typeof(BinarySettings), "DeserializeStandardServiceSettings", applySettings, service, serializedSettings.DispatchVehicles, serializedSettings.ChecksPreset, ServiceDispatcherSettings.BuildingChecksPresetInfo.ToString(serializedSettings.ChecksParameters), ServiceDispatcherSettings.BuildingChecksPresetInfo.ToString(serializedSettings.ChecksCustom)); if (applySettings) { serviceSettings.CopyFrom(serializedSettings); } } return(DeserializationResult.Success); }
/// <summary> /// Deserializes a hidden service settings block. /// </summary> /// <param name="serializedData">The serialized data.</param> /// <param name="settings">The settings.</param> /// <returns>The deserialization result.</returns> private static DeserializationResult DeserializeHiddenServiceSettings(BinaryData serializedData, Settings settings) { if (serializedData == null || serializedData.Left == 0) { return(DeserializationResult.EndOfData); } Log.DevDebug(typeof(BinarySettings), "DeserializeHiddenServiceSettings", applySettings); serializedData.ResetLocalCheckSum(); SettingsType settingsType = serializedData.GetSettingsType(); if (settingsType != SettingsType.HiddenService) { throw new InvalidOperationException("Not a hidden service settings block"); } ulong version = serializedData.GetVersion(); if (version > 0) { Log.Warning(typeof(BinarySettings), "DeserializeHiddenServiceSettings", "Serialized data version too high", version, 0); return(DeserializationResult.Error); } HiddenServiceSettings serviceSettings; HiddenServiceSettings serializedSettings; ServiceType service = serializedData.GetServiceType(); switch (service) { case ServiceType.WreckingCrews: serviceSettings = settings.WreckingCrews; break; case ServiceType.RecoveryCrews: serviceSettings = settings.RecoveryCrews; break; default: Log.Warning(typeof(BinarySettings), "Not a hidden service", service); serviceSettings = null; break; } serializedSettings = new HiddenServiceSettings(serviceSettings); // Settings. serializedSettings.DispatchVehicles = serializedData.GetBool(); serializedSettings.DelaySeconds = serializedData.GetDouble(); serializedData.CheckLocalCheckSum(); if (serviceSettings != null) { Log.Debug(typeof(BinarySettings), "DeserializeHiddenServiceSettings", applySettings, service, serializedSettings.DispatchVehicles, serializedSettings.DelaySeconds); if (applySettings) { serviceSettings.CopyFrom(serializedSettings); } } return(DeserializationResult.Success); }