예제 #1
0
        private static void RunMineRestartMonitor(EventAggregator bus)
        {
            object sync = new object();

            var disksToMine = new DriveInfo[0];

            void OnCompletedPlotFile(CompletedPlotFileNotification e)
            {
                lock (sync)
                {
                    disksToMine = disksToMine.Union(new[] { e.Disk }).ToArray();
                }

                _logger.LogDebug($"mining disks: {disksToMine.Select(d => d.Name).Aggregate((disks, next) => $"{disks}, {next}")}");

                bus.GetEvent <PubSubEvent <RestartMiningNotification> >().Publish(new RestartMiningNotification(disksToMine));
            }

            void OnMiningUnavailableForDrive(MiningUnavailableForDriveNotification e)
            {
                var restartMining = false;

                lock (sync)
                {
                    if (disksToMine.Contains(e.Disk))
                    {
                        restartMining = true;
                        disksToMine   = disksToMine.Except(new[] { e.Disk }).ToArray();
                    }
                }

                if (restartMining)
                {
                    bus.GetEvent <PubSubEvent <RestartMiningNotification> >().Publish(new RestartMiningNotification(disksToMine));
                }
            }

            bus.GetEvent <PubSubEvent <CompletedPlotFileNotification> >().Subscribe(OnCompletedPlotFile, true);
            bus.GetEvent <PubSubEvent <MiningUnavailableForDriveNotification> >().Subscribe(OnMiningUnavailableForDrive, true);
        }
예제 #2
0
        public static void FindJava(out string javaPath, string iniPath = null)
        {
            javaPath = null;
            if (!string.IsNullOrEmpty(iniPath))
            {
                javaPath = Ini.ReadDirect("Java", "Path", iniPath);
                if (File.Exists(javaPath))
                {
                    return;
                }
            }
            try
            {
                var envVar  = PathEx.LocalDir;
                var drive   = new DriveInfo(envVar).RootDirectory.Root.Name;
                var javaDir = drive;
                foreach (var dirName in envVar.Split('\\'))
                {
                    try
                    {
                        if (drive.Contains(dirName))
                        {
                            continue;
                        }
                        javaDir = Path.Combine(javaDir, dirName);
                        string tmpDir;
                        if (Environment.Is64BitOperatingSystem)
                        {
                            tmpDir = Path.Combine(javaDir, "CommonFiles\\Java64");
                            if (Directory.Exists(tmpDir))
                            {
                                foreach (var file in Directory.GetFiles(tmpDir, "javaw.exe", SearchOption.AllDirectories))
                                {
                                    javaDir  = tmpDir;
                                    javaPath = file;
                                    break;
                                }
                            }
                        }
                        tmpDir = Path.Combine(javaDir, "CommonFiles\\Java");
                        if (!Directory.Exists(tmpDir))
                        {
                            continue;
                        }
                        foreach (var file in Directory.GetFiles(tmpDir, "javaw.exe", SearchOption.AllDirectories))
                        {
                            javaDir  = tmpDir;
                            javaPath = file;
                            break;
                        }
                        if (File.Exists(javaPath))
                        {
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Write(ex);
                    }
                }

                if (!File.Exists(javaPath))
                {
                    throw new PathNotFoundException(javaPath);
                }

                if (!string.IsNullOrEmpty(iniPath))
                {
                    Ini.WriteDirect("Java", "Path", javaPath, iniPath);
                }
            }
            catch (Exception ex)
            {
                Log.Write(ex);
                var info = FileVersionInfo.GetVersionInfo(PathEx.LocalPath);
                MessageBox.Show(@"Java Portable not found!", info.FileDescription, MessageBoxButtons.OK, MessageBoxIcon.Error);
                Environment.ExitCode = 1;
                Environment.Exit(Environment.ExitCode);
            }
        }