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); }
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); }