Ejemplo n.º 1
0
        public async Task <int> Execute()
        {
            // service mode
            if (LogLvl.HasValue)
            {
                Settings.LogLevel.Value = LogLvl.Value;
            }

            Console.Title = "gsudo Service";
            var cacheLifetime = new CredentialsCacheLifetimeManager(AllowedPid);

            Logger.Instance.Log("Service started", LogLevel.Info);

            using (IRpcServer server = CreateServer())
            {
                try
                {
                    cacheLifetime.OnCacheClear += server.Close;
                    ShutdownTimer              = new Timer((o) => server.Close(), null, Timeout.Infinite, Timeout.Infinite); // 10 seconds for initial connection or die.
                    server.ConnectionAccepted += (o, connection) => AcceptConnection(connection).ConfigureAwait(false).GetAwaiter().GetResult();
                    server.ConnectionClosed   += (o, connection) => EnableTimer();

                    Logger.Instance.Log($"Service will shutdown if idle for {CacheDuration}", LogLevel.Debug);
                    EnableTimer();
                    await server.Listen().ConfigureAwait(false);
                }
                catch (System.OperationCanceledException) { }
                finally
                {
                    cacheLifetime.OnCacheClear -= server.Close;
                }
            }

            Logger.Instance.Log("Service stopped", LogLevel.Info);
            return(0);
        }
Ejemplo n.º 2
0
        public async Task <int> Execute()
        {
            // service mode
            if (LogLvl.HasValue)
            {
                GlobalSettings.LogLevel.Value = LogLvl.Value;
            }

            Console.Title = "gsudo Service";
            Logger.Instance.Log("Service started", LogLevel.Info);

            using (IRpcServer server = CreateServer())
            {
                ShutdownTimer              = new Timer((o) => server.Close());
                server.ConnectionAccepted += async(o, connection) => await AcceptConnection(connection).ConfigureAwait(false);

                server.ConnectionClosed += (o, cònnection) => EnableTimer();

                await server.Listen().ConfigureAwait(false);
            }

            Logger.Instance.Log("Service stopped", LogLevel.Info);
            return(0);
        }