상속: IDisposable
예제 #1
0
 private static bool AreGeneratorsRunning(OnionGenerator[] generators)
 {
     foreach (OnionGenerator o in generators)
     {
         if (o != null && o.Running)
         {
             return true;
         }
     }
     return false;
 }
예제 #2
0
 private static OnionGenerator[] PrepareGenerators(Settings settings, IAppender appender)
 {
     OnionGenerator[] generators = new OnionGenerator[settings.WorkerCount];
     for (int i = 0; i < generators.Length; ++i)
     {
         generators[i] = new OnionGenerator {
             OnionPattern  = settings.ToMatch,
             PickDirectory = PickOutputDirectory,
             GenerateMax   = settings.MaxGenerate,
             MatchMax      = settings.MaxMatch,
         };
         generators[i].OnionAppender.AddAppender(appender);
     }
     return(generators);
 }
예제 #3
0
        private static void WaitForSignal(OnionGenerator[] generators)
        {
            using (UnixSignal term = new UnixSignal(Signum.SIGTERM))
            using (UnixSignal ctlc = new UnixSignal(Signum.SIGINT))
            using (UnixSignal hup = new UnixSignal(Signum.SIGHUP))
            {
                UnixSignal[] signals = new UnixSignal[] { term, ctlc, hup };
                while (AreGeneratorsRunning(generators))
                {
                    int retVal = UnixSignal.WaitAny(signals, 100);

                    if (retVal != CHECK_INTERVAL)
                    {
                        Log.InfoFormat("Received signal {0}, exiting", signals[retVal].Signum);
                        break;
                    }
                }
            }
        }
예제 #4
0
        private static void TerminateAllGenerators(OnionGenerator[] generators)
        {
            Log.Info("Stopping onion address generation");
            if (generators != null)
            {
                Log.Debug("Sending stop command to workers");
                foreach (OnionGenerator o in generators)
                {
                    if (o != null)
                    {
                        o.Stop();
                    }
                }
                Log.Debug("Sent stop command to workers");

                Log.Debug("Waiting for workers to stop");
                while (AreGeneratorsRunning(generators))
                {
                    Thread.Sleep(0);
                }
                Log.Debug("Workers stopped");
            }
            Log.Debug("Stopped onion address generation");
        }
예제 #5
0
 private static OnionGenerator[] PrepareGenerators(Settings settings, IAppender appender)
 {
     OnionGenerator[] generators = new OnionGenerator[settings.WorkerCount];
     for (int i = 0; i < generators.Length; ++i)
     {
         generators[i] = new OnionGenerator {
             OnionPattern = settings.ToMatch,
             PickDirectory = PickOutputDirectory,
             GenerateMax = settings.MaxGenerate,
             MatchMax = settings.MaxMatch,
         };
         generators[i].OnionAppender.AddAppender(appender);
     }
     return generators;
 }
예제 #6
0
 private static void NonPosixWait(OnionGenerator[] generators)
 {
     while (AreGeneratorsRunning(generators))
     {
         Thread.Sleep(100);
     }
 }