示例#1
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);
            }
        }
示例#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();
        }
        public async Task <HandleResult> HandleRequest(HttpRequest httpReq, DateTime requestArrivedOn)
        {
            var requestedHost = httpReq.Host;

            if (string.IsNullOrEmpty(requestedHost))
            {
                return(new HandleResult(-1, -1, BadRequest));
            }

            int          routeTableIndex, endpointIndex;
            HttpResponse httpResp;

            if ((routeTableIndex = MatchRouteTable(requestedHost)) < 0)
            {
                endpointIndex = -1;
                httpResp      = NotFound; // no matching host
            }
            else
            {
                RouteTable routeTable = routeTables[routeTableIndex];

                //TODO: httpReq = filterChain.FilterRequest(httpReq);

                IReadOnlyDictionary <string, string> pathVariables;
                if ((endpointIndex = routeTable.TryMatchEndpoint(httpReq.Method, httpReq.Url, out pathVariables)) < 0)
                {
                    httpResp = NotFound; // no matching route
                }
                else
                {
                    httpReq.PathVariables = pathVariables;

                    try
                    {
                        httpResp = await routeTable[endpointIndex].Handler(httpReq).ConfigureAwait(false);
                    }
                    catch (RequestException e)
                    {
                        httpResp = new ErrorResponse(e.HttpStatusCode, e);
                    }
                    catch (Exception e)
                    {
                        logger.Error("Error handling request:[{0}:{1}] - [{2}]: {3}", httpReq.Method, httpReq.Path, e.GetType().Name, e);
                        httpResp = new ErrorResponse(HttpStatusCode.InternalServerError, e);
                    }
                }

                //TODO: httpResp = routeTable.FilterResponse(httpReq, httpResp);

                if (endpointIndex >= 0)
                {
                    // int spins = 0;
                    while (!requestLogs.TryAdd(routeTableIndex, endpointIndex, httpReq, httpResp, requestArrivedOn, DateTime.UtcNow))
                    {
                        // spins++;
                        timer.Signal();
                        // await Task.Yield();
                    }

                    // if (spins > 0)
                    // {
                    //     logger.Warn("Incurred {0} spins to add request log", spins);
                    // }
                }
            }

            return(new HandleResult(routeTableIndex, endpointIndex, httpResp));
        }