void Loop()
        {
            logger.Info("{0} with {1} jobs started", this, jobs.Length);

            var stopWatch  = new Stopwatch();
            var jobsTimeMs = 0d;

            while (!IsShutdown)
            {
                var waitFor = (int)(Period.TotalMilliseconds - jobsTimeMs);
                if (waitFor > 0)
                {
                    if (evt.WaitOne(waitFor))
                    {
                        signalsReceived++;
                    }
                    else
                    {
                        timeouts++;
                    }
                }

                jobsTimeMs = 0;
                stopWatch.Restart();
                RunJobs();
                stopWatch.Stop();
                jobsTimeMs += stopWatch.Elapsed.TotalMilliseconds;
            }

            RunJobs();

            logger.Info("{0} stopped", this);
        }
Beispiel #2
0
        async void ConnectionLoop()
        {
            listener.Start(backlog);
            logger.Info("Listening on {0}", listener.LocalEndpoint);

            while (true)
            {
                try
                {
                    var client = await listener.AcceptTcpClientAsync();

                    var sessionId = ++acceptedSessions;

                    HandleNewConnection(sessionId, client);
                }
                catch (SocketException e)
                {
                    if (lifeCycleToken.IsShutdown) // triggered by listener.Stop()
                    {
                        logger.Info("Listener shutting down");
                        break;
                    }
                    else
                    {
                        logger.Error("Exception while accepting TcpClient - {0}", e.ToString());
                    }
                }
            }

            logger.Info("Listener closed (accepted: {0})", acceptedSessions);

            router.Shutdown();
        }
Beispiel #3
0
        static public void saveRegistro(String text, levels logLevel)
        {
            try
            {
                switch (logLevel)
                {
                case levels.debug:
                    logger.Debug(text);
                    break;

                case levels.error:
                    logger.Error(text);
                    break;

                case levels.info:
                    logger.Info(text);
                    break;

                case levels.warning:
                    logger.Warn(text);
                    break;

                default:
                    logger.Info(text);
                    break;
                }
            }
            catch (Exception ex)
            {
                EventLog ev = new EventLog();
                ev.WriteEntry(ex.Message, EventLogEntryType.Error);
            }
        }
Beispiel #4
0
        void GetContextLoop()
        {
            listener.Start();
            logger.Info("Listening on [{0}]", ListenOn);

            while (!lifeCycleToken.IsShutdown)
            {
                if (getContexts.WaitOne(10))
                {
                    listener.GetContextAsync().ContinueWith(ProcessHttpListenerContext);
                }
            }

            listener.Stop();
            listener.Close();

            logger.Info("Listener closed.");

            router.Shutdown();
        }
Beispiel #5
0
        public async Task <PooledResource <TResource> > GetAsync(TimeSpan poolTimeout)
        {
            if (await pool.WaitAsync(poolTimeout).ConfigureAwait(false))
            {
                TResource resource;

                // 1. Try taking one from existing - if available
                int current;
                while ((current = currentFreeCount) > 0)
                {
                    if (Interlocked.CompareExchange(ref currentFreeCount, current - 1, current) == current)
                    {
                        while (!bag.TryTake(out resource))
                        {
                        }

                        return(new PooledResource <TResource>(resource, ReturnAndRelease));
                    }
                }

                // 2. Else grow (increment) pool by one
                try
                {
                    resource = await AcquireNewResourceAsync().ConfigureAwait(false);

                    Interlocked.Increment(ref currentPoolSize);
                    logger.Info("{0}: Created new pooled resource", this);

                    return(new PooledResource <TResource>(resource, ReturnAndRelease));
                }
                catch (Exception e)
                {
                    pool.Release();
                    throw new Exception($"{this}: error acquiring new resource - {e.Message}", e);
                }
            }
            else
            {
                throw new TimeoutException($"{this}: timeout ({poolTimeout}) waiting to get PooledResource (pool busy)");
            }
        }