private static void DeserializeVersionData(byte[] data) { bool error = false; try { if (data != null && data.Length != 0) { Log.Info($"Loading VersionInfo Data! Length={data.Length}"); var memoryStream = new MemoryStream(); memoryStream.Write(data, 0, data.Length); memoryStream.Position = 0; var binaryFormatter = new BinaryFormatter(); binaryFormatter.AssemblyFormat = System .Runtime.Serialization.Formatters .FormatterAssemblyStyle.Simple; _versionInfoConfiguration = (VersionInfoConfiguration)binaryFormatter.Deserialize(memoryStream); } else { Log.Info("No VersionInfo data to deserialize!"); } } catch (Exception e) { Log.Error($"Error deserializing data: {e}"); Log.Info(e.StackTrace); error = true; } if (!error) { ReportVersionInfo(out error); } if (error) { throw new ApplicationException("An error occurred while loading version information"); } }
public static void Save() { bool success = true; // try { // Log.Info("Recalculating segment geometries"); // SegmentGeometry.OnBeforeSaveData(); // } // catch (Exception e) { // Log.Error( // $"OnSaveData: Exception occurred while calling SegmentGeometry.OnBeforeSaveData: {e.ToString()}"); // error = true; // } foreach (ICustomManager manager in TMPELifecycle.Instance.RegisteredManagers) { try { Log.Info($"OnBeforeSaveData: {manager.GetType().Name}"); manager.OnBeforeSaveData(); } catch (Exception e) { Log.Error($"OnSaveData: Error while notifying {manager.GetType().Name}.OnBeforeSaveData: {e}"); success = false; } } try { Log.Info("Saving Mod Data."); var configuration = new Configuration(); //------------------ // Citizens //------------------ configuration.ExtCitizens = ExtCitizenManager.Instance.SaveData(ref success); configuration.ExtCitizenInstances = ExtCitizenInstanceManager.Instance.SaveData(ref success); //------------------ // Traffic Priorities //------------------ configuration.PrioritySegments = TrafficPriorityManager.AsPrioritySegmentsDM() .SaveData(ref success); configuration.CustomPrioritySegments = TrafficPriorityManager.AsCustomPrioritySegmentsDM() .SaveData(ref success); //------------------ // Junction Restrictions //------------------ configuration.SegmentNodeConfs = JunctionRestrictionsManager.Instance.SaveData(ref success); //------------------ // Traffic Lights //------------------ configuration.TimedLights = TrafficLightSimulationManager.Instance.SaveData(ref success); // configuration.NodeTrafficLights = ((ICustomDataManager<string>)TrafficLightManager.Instance) // .SaveData(ref success); // configuration.ToggledTrafficLights = // ((ICustomDataManager<List<Configuration.NodeTrafficLight>>)TrafficLightManager.Instance) // .SaveData(ref success); //------------------ // Lane Arrows and Connections //------------------ configuration.LaneFlags = LaneArrowManager.AsLaneFlagsDM().SaveData(ref success); configuration.LaneArrows = LaneArrowManager.AsLaneArrowsDM().SaveData(ref success); configuration.LaneConnections = LaneConnectionManager.Instance.SaveData(ref success); //------------------ // Speed Limits //------------------ configuration.LaneSpeedLimits = SpeedLimitManager.AsLaneSpeedLimitsDM().SaveData(ref success); configuration.CustomDefaultSpeedLimits = SpeedLimitManager.AsCustomDefaultSpeedLimitsDM() .SaveData(ref success); //------------------ // Vehicle and Parking Restrictions //------------------ configuration.LaneAllowedVehicleTypes = VehicleRestrictionsManager.Instance.SaveData(ref success); configuration.ParkingRestrictions = ParkingRestrictionsManager.Instance.SaveData(ref success); //------------------ // Version //------------------ VersionInfoConfiguration versionConfig = new VersionInfoConfiguration(); versionConfig.VersionInfo = new VersionInfo(VersionUtil.ModVersion); var binaryFormatterVersion = new BinaryFormatter(); var memoryStreamVersion = new MemoryStream(); try { binaryFormatterVersion.Serialize(memoryStreamVersion, versionConfig); memoryStreamVersion.Position = 0; Log.Info($"Version data byte length {memoryStreamVersion.Length}"); SerializableData.SaveData(VERSION_INFO_DATA_ID, memoryStreamVersion.ToArray()); } catch (Exception ex) { Log.Error("Unexpected error while saving version data: " + ex); success = false; } finally { memoryStreamVersion.Close(); } try { if (TMPELifecycle.PlayMode) { SerializableData.SaveData("TMPE_Options", OptionsManager.Instance.SaveData(ref success)); } } catch (Exception ex) { Log.Error("Unexpected error while saving options: " + ex.Message); success = false; } var binaryFormatter = new BinaryFormatter(); var memoryStream = new MemoryStream(); try { binaryFormatter.Serialize(memoryStream, configuration); memoryStream.Position = 0; Log.Info($"Save data byte length {memoryStream.Length}"); SerializableData.SaveData(DATA_ID, memoryStream.ToArray()); } catch (Exception ex) { Log.Error("Unexpected error while saving data: " + ex); success = false; } finally { memoryStream.Close(); } var reverseManagers = new List <ICustomManager>(TMPELifecycle.Instance.RegisteredManagers); reverseManagers.Reverse(); foreach (ICustomManager manager in reverseManagers) { try { Log.Info($"OnAfterSaveData: {manager.GetType().Name}"); manager.OnAfterSaveData(); } catch (Exception e) { Log.Error( $"OnSaveData: Error while notifying {manager.GetType().Name}.OnAfterSaveData: {e}"); success = false; } } } catch (Exception e) { success = false; Log.Error($"Error occurred while saving data: {e}"); // UIView.library.ShowModal<ExceptionPanel>("ExceptionPanel") // .SetMessage("An error occurred while saving", "Traffic Manager: President Edition // detected an error while saving. To help preventing future errors, please navigate // to http://steamcommunity.com/sharedfiles/filedetails/?id=583429740 and follow // the steps under 'In case problems arise'.", true); } }