예제 #1
0
        private async Task <bool> InternalInitialize(ServerSettings serverSettings, bool throwError, IServiceProxyLogger logger, SourceLevels logLevel = SourceLevels.Error)
#endif
        {
#if DOTNET4
            lock (Instance._syncLock)
#else
            using (await _asyncLock.LockAsync().ConfigureAwait(false))
#endif
            {
                ServerSettings      previousServerSettings = _serverSettings;
                bool                previousIsInitialized  = _isInitialized;
                IServiceProxyLogger previousLogger         = _logger;

                try
                {
                    _isInitialized  = false;
                    _serverSettings = serverSettings;
                    _logger         = logger ?? new DefaultLogger();

                    WakeOnLan.EnsureServerAwake(serverSettings);

                    DateTime firstTryTime = DateTime.Now;
                    for (; ;)
                    {
                        try
                        {
#if DOTNET4
                            PingAndCheckServer(serverSettings).Wait();
#else
                            await PingAndCheckServer(serverSettings).ConfigureAwait(false);
#endif
                            break;
                        }
                        catch
                        {
                            TimeSpan span = DateTime.Now - firstTryTime;
                            if (!serverSettings.WakeOnLan.Enabled ||
                                span.TotalSeconds >= serverSettings.WakeOnLan.TimeoutSeconds)
                            {
                                throw;
                            }
                            System.Threading.Thread.Sleep(1000);
                        }
                    }
                }
                catch
                {
                    _serverSettings = previousServerSettings;
                    _logger         = previousLogger;
                    _isInitialized  = previousIsInitialized;
                    if (!throwError)
                    {
                        return(false);
                    }
                    throw;
                }

                ResetProxies();
                _isInitialized = true;
                return(true);
            }
        }
예제 #2
0
 /// <summary>
 /// Initialize the proxies for the given server settings.
 /// </summary>
 /// <param name="serverSettings">Where to locate the ARGUS TV Scheduler service.</param>
 /// <param name="throwError">If set to true an exception may be thrown, if false any errors will be swallowed.</param>
 /// <param name="logger">An optional logger that should be thread-safe and that will be used to log any errors that occur in the proxy.</param>
 /// <param name="logLevel">The optional logging level, currently ignored and always set to the default of Error.</param>
 /// <returns>If throwError was false, a boolean indicating success or failure.</returns>
 public static async Task <bool> InitializeAsync(ServerSettings serverSettings, bool throwError = true, IServiceProxyLogger logger = null, SourceLevels logLevel = SourceLevels.Error)
 {
     return(await Proxies.Instance.InternalInitialize(serverSettings, throwError, logger, logLevel).ConfigureAwait(false));
 }
예제 #3
0
 private bool InternalInitialize(ServerSettings serverSettings, bool throwError, IServiceProxyLogger logger, SourceLevels logLevel = SourceLevels.Error)
예제 #4
0
        /// <summary>
        /// Initialize the proxies for the given server settings.
        /// </summary>
        /// <param name="serverSettings">Where to locate the ARGUS TV Scheduler service.</param>
        /// <param name="throwError">If set to true an exception may be thrown, if false any errors will be swallowed.</param>
        /// <param name="logger">An optional logger that should be thread-safe and that will be used to log any errors that occur in the proxy.</param>
        /// <param name="logLevel">The optional logging level, currently ignored and always set to the default of Error.</param>
        /// <returns>If throwError was false, a boolean indicating success or failure.</returns>
        public static bool Initialize(ServerSettings serverSettings, bool throwError = true, IServiceProxyLogger logger = null, SourceLevels logLevel = SourceLevels.Error)
        {
#if DOTNET4
            return(Proxies.Instance.InternalInitialize(serverSettings, throwError, logger, logLevel));
#else
            return(Proxies.Instance.InternalInitialize(serverSettings, throwError, logger, logLevel).Result);
#endif
        }
예제 #5
0
        private async Task<bool> InternalInitialize(ServerSettings serverSettings, bool throwError, IServiceProxyLogger logger, SourceLevels logLevel = SourceLevels.Error)
#endif
        {
#if DOTNET4
            lock (Instance._syncLock)
#else
            using (await _asyncLock.LockAsync().ConfigureAwait(false))
#endif
            {
                ServerSettings previousServerSettings = _serverSettings;
                bool previousIsInitialized = _isInitialized;
                IServiceProxyLogger previousLogger = _logger;

                try
                {
                    _isInitialized = false;
                    _serverSettings = serverSettings;
                    _logger = logger ?? new DefaultLogger();

                    WakeOnLan.EnsureServerAwake(serverSettings);

                    DateTime firstTryTime = DateTime.Now;
                    for (; ; )
                    {
                        try
                        {
#if DOTNET4
                            PingAndCheckServer(serverSettings).Wait();
#else
                            await PingAndCheckServer(serverSettings).ConfigureAwait(false);
#endif
                            break;
                        }
                        catch
                        {
                            TimeSpan span = DateTime.Now - firstTryTime;
                            if (!serverSettings.WakeOnLan.Enabled
                                || span.TotalSeconds >= serverSettings.WakeOnLan.TimeoutSeconds)
                            {
                                throw;
                            }
                            System.Threading.Thread.Sleep(1000);
                        }
                    }
                }
                catch
                {
                    _serverSettings = previousServerSettings;
                    _logger = previousLogger;
                    _isInitialized = previousIsInitialized;
                    if (!throwError)
                    {
                        return false;
                    }
                    throw;
                }

                ResetProxies();
                _isInitialized = true;
                return true;
            }
        }
예제 #6
0
 private bool InternalInitialize(ServerSettings serverSettings, bool throwError, IServiceProxyLogger logger, SourceLevels logLevel = SourceLevels.Error)
예제 #7
0
 /// <summary>
 /// Initialize the proxies for the given server settings.
 /// </summary>
 /// <param name="serverSettings">Where to locate the ARGUS TV Scheduler service.</param>
 /// <param name="throwError">If set to true an exception may be thrown, if false any errors will be swallowed.</param>
 /// <param name="logger">An optional logger that should be thread-safe and that will be used to log any errors that occur in the proxy.</param>
 /// <param name="logLevel">The optional logging level, currently ignored and always set to the default of Error.</param>
 /// <returns>If throwError was false, a boolean indicating success or failure.</returns>
 public static async Task<bool> InitializeAsync(ServerSettings serverSettings, bool throwError = true, IServiceProxyLogger logger = null, SourceLevels logLevel = SourceLevels.Error)
 {
     return await Proxies.Instance.InternalInitialize(serverSettings, throwError, logger, logLevel).ConfigureAwait(false);
 }
예제 #8
0
        /// <summary>
        /// Initialize the proxies for the given server settings.
        /// </summary>
        /// <param name="serverSettings">Where to locate the ARGUS TV Scheduler service.</param>
        /// <param name="throwError">If set to true an exception may be thrown, if false any errors will be swallowed.</param>
        /// <param name="logger">An optional logger that should be thread-safe and that will be used to log any errors that occur in the proxy.</param>
        /// <param name="logLevel">The optional logging level, currently ignored and always set to the default of Error.</param>
        /// <returns>If throwError was false, a boolean indicating success or failure.</returns>
        public static bool Initialize(ServerSettings serverSettings, bool throwError = true, IServiceProxyLogger logger = null, SourceLevels logLevel = SourceLevels.Error)
        {
#if DOTNET4
            return Proxies.Instance.InternalInitialize(serverSettings, throwError, logger, logLevel);
#else
            return Proxies.Instance.InternalInitialize(serverSettings, throwError, logger, logLevel).Result;
#endif
        }