示例#1
0
        /// <summary>Is called when the plugin is loaded.</summary>
        /// <param name="properties">The properties supplied to the plugin on loading.</param>
        /// <returns>Whether the plugin was loaded successfully.</returns>
        public bool Load(LoadProperties properties)
        {
            properties.Panel = new int[512];
            SoundManager.Initialise(properties.PlaySound, 512);
            MessageManager.Initialise(properties.AddMessage);
            properties.AISupport = AISupport.Basic;
            this.Train           = new Train(properties.Panel);
            //No AI Support
            //properties.AISupport = AISupport.None;

            this.Train = new Train(properties.Panel);
            string configFile         = Path.CombineFile(properties.TrainFolder, "BVEC_Ats.cfg");
            string OS_ATSDLL          = Path.CombineFile(properties.TrainFolder, "OS_ATS1.dll");
            string SZ_ATSDLL          = Path.CombineFile(properties.TrainFolder, "OS_SZ_ATS1.dll");
            string SZ_ATSDLL_2        = Path.CombineFile(properties.TrainFolder, "OS_SZ_Ats2_0.dll");
            string OS_ATSconfigFile   = Path.CombineFile(properties.TrainFolder, "OS_ATS1.cfg");
            string SZ_ATSconfigFile   = Path.CombineFile(properties.TrainFolder, "OS_SZ_ATS1.cfg");
            string SZ_ATS_2configFile = Path.CombineFile(properties.TrainFolder, "OS_SZ_Ats2_0.cfg");
            string ODF_ATSconfigFile  = Path.CombineFile(properties.TrainFolder, "OdakyufanAts.cfg");

            TrainFolder = properties.TrainFolder;
            //Delete error.log from previous run
            if (File.Exists(Path.CombineFile(properties.TrainFolder, "error.log")))
            {
                try
                {
                    File.Delete(Path.CombineFile(properties.TrainFolder, "error.log"));
                }
                catch
                {
                    FolderWriteAccess = false;
                }
            }
            if (File.Exists(configFile))
            {
                //Check for the automatic generator version
                string generatorversion;
                using (var reader = new StreamReader(configFile))
                {
                    //Read in first line
                    generatorversion = reader.ReadLine();
                }
                //If it exists
                try
                {
                    if (generatorversion != null && generatorversion.StartsWith(";GenVersion="))
                    {
                        string versiontext = Regex.Match(generatorversion, @"\d+").Value;
                        int    version     = Int32.Parse(versiontext, NumberStyles.Number, CultureInfo.InvariantCulture);
                        //If we're below the current version, try to upgrade again
                        if (version < 1)
                        {
                            if (File.Exists(OS_ATSDLL) && File.Exists(OS_ATSconfigFile))
                            {
                                try
                                {
                                    string[] Lines = UpgradeOSATS.UpgradeConfigurationFile(OS_ATSconfigFile, properties.TrainFolder);
                                }
                                catch (Exception)
                                {
                                    properties.FailureReason = "An error occured whilst attempting to upgrade the OS_ATS configuration.";
                                    return(false);
                                }
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    properties.FailureReason = "Empty configuration file detected.";
                    return(false);
                }

                //Now try loading
                try
                {
                    string[] Lines = File.ReadAllLines(configFile, Encoding.UTF8);
                    this.Train.LoadConfigurationFile(Lines);
                    return(true);
                }
                catch (Exception ex)
                {
                    properties.FailureReason = "Error loading the configuration file: " + ex.Message;
                    return(false);
                }
            }
            if (!File.Exists(configFile) && File.Exists(OS_ATSDLL) && File.Exists(OS_ATSconfigFile))
            {
                //The F92_en is blacklisted due to a custom OS_ATS version
                if (Regex.IsMatch(properties.TrainFolder, @"\\F92_en(\\)?", RegexOptions.IgnoreCase))
                {
                    properties.FailureReason = "The F92_en is not currently a supported train.";
                    try
                    {
                        using (StreamWriter sw = File.CreateText(Path.CombineFile(properties.TrainFolder, "error.log")))
                        {
                            sw.WriteLine("The F92_en is not currently a supported train");
                        }
                        return(false);
                    }
                    catch
                    {
                        return(false);
                    }
                }
                //If there is no existing BVEC_ATS configuration file, but OS_ATS and the appropriate
                //configuration files exist, then attempt to upgrade the existing file to BVEC_ATS
                try
                {
                    string[] Lines = UpgradeOSATS.UpgradeConfigurationFile(OS_ATSconfigFile, properties.TrainFolder);
                    try
                    {
                        File.WriteAllLines(Path.CombineFile(TrainFolder, "BVEC_ATS.cfg"), Lines);
                    }
                    catch
                    {
                        //Error writing the new configuration file
                    }
                    this.Train.LoadConfigurationFile(Lines);
                    return(true);
                }
                catch (Exception)
                {
                    properties.FailureReason = "Error upgrading the existing OS_ATS configuration.";
                    using (StreamWriter sw = File.CreateText(Path.CombineFile(properties.TrainFolder, "error.log")))
                    {
                        sw.WriteLine("An existing OS_ATS configuration was found.");
                        sw.WriteLine("However, an error occurred upgrading the existing OS_ATS configuration.");
                    }
                    return(false);
                }
            }
            if (File.Exists(SZ_ATSDLL))
            {
                //We've found an OS_SZ_ATS equipped train
                //Upgrade for this is in alpha
                try
                {
                    string[] Lines = UpgradeOSSZATS.UpgradeConfigurationFile(SZ_ATSconfigFile, properties.TrainFolder);
                    try
                    {
                        File.WriteAllLines(Path.CombineFile(TrainFolder, "BVEC_ATS.cfg"), Lines);
                    }
                    catch
                    {
                        //Error writing the new configuration file
                    }
                    this.Train.LoadConfigurationFile(Lines);
                    return(true);
                }
                catch (Exception)
                {
                    properties.FailureReason = "Error upgrading the existing OS_SZ_ATS configuration.";
                    using (StreamWriter sw = File.CreateText(Path.CombineFile(properties.TrainFolder, "error.log")))
                    {
                        sw.WriteLine("An existing OS_SZ_ATS configuration was found.");
                        sw.WriteLine("However, an error occurred upgrading the existing OS_SZ_ATS configuration.");
                    }
                    return(false);
                }
            }
            else
            {
                if (File.Exists(SZ_ATSDLL_2))
                {
                    //We've found an OS_SZ_ATS equipped train
                    //Upgrade for this is in alpha
                    try
                    {
                        string[] Lines = UpgradeOSSZATS.UpgradeConfigurationFile(SZ_ATS_2configFile, properties.TrainFolder);
                        try
                        {
                            File.WriteAllLines(Path.CombineFile(TrainFolder, "BVEC_ATS.cfg"), Lines);
                        }
                        catch
                        {
                            //Error writing the new configuration file
                        }
                        this.Train.LoadConfigurationFile(Lines);
                        return(true);
                    }
                    catch (Exception)
                    {
                        properties.FailureReason = "Error upgrading the existing OS_SZ_ATS configuration.";
                        using (StreamWriter sw = File.CreateText(Path.CombineFile(properties.TrainFolder, "error.log")))
                        {
                            sw.WriteLine("An existing OS_SZ_ATS configuration was found.");
                            sw.WriteLine("However, an error occurred upgrading the existing OS_SZ_ATS configuration.");
                        }
                        return(false);
                    }
                }
                if (File.Exists(ODF_ATSconfigFile))
                {
                    //We've found an OdyakufanATS equipped train
                    //Upgrade for this is in alpha
                    try
                    {
                        File.Copy(ODF_ATSconfigFile, configFile);
                        string[] Lines = File.ReadAllLines(configFile);
                        this.Train.LoadConfigurationFile(Lines);
                        return(true);
                    }
                    catch (Exception ex)
                    {
                        properties.FailureReason = "Error loading the configuration file: " + ex.Message;
                        return(false);
                    }
                }
                else
                {
                    properties.FailureReason = "No supported configuration files exist.";
                    //Write out error.log with details of what it thinks was found and missing
                    using (StreamWriter sw = File.CreateText(Path.CombineFile(properties.TrainFolder, "error.log")))
                    {
                        sw.WriteLine("Plugin location " + Convert.ToString(properties.TrainFolder));
                        if (File.Exists(OS_ATSDLL))
                        {
                            sw.WriteLine("OS_ATS DLL found");
                        }
                        else
                        {
                            sw.WriteLine("No OS_ATS DLL found");
                        }

                        if (File.Exists(OS_ATSconfigFile))
                        {
                            sw.WriteLine("OS_ATS configuration file found");
                        }
                        else
                        {
                            sw.WriteLine("No OS_ATS configuration file found");
                        }
                    }
                    return(false);
                }
            }
        }