private async Task <bool> HandleStatus(IStatusHandlerContext context)
        {
            if (!context.IsGetLike || context.Url !.AbsolutePath != "/status")
            {
                return(false);
            }

            var jObject = new JsonObject
            {
                // We need to send at LEAST name and player count to have the launcher work with us.
                // Content can override these if it wants (e.g. stealthmins).
                ["name"]    = _serverNameCache,
                ["players"] = _playerManager.PlayerCount
            };

            OnStatusRequest?.Invoke(jObject);

            await context.RespondJsonAsync(jObject);

            return(true);
        }
示例#2
0
        private bool _handleStatus(HttpMethod method, HttpListenerRequest request, HttpListenerResponse response)
        {
            if (!method.IsGetLike() || request.Url.AbsolutePath != "/status")
            {
                return(false);
            }

            if (OnStatusRequest == null)
            {
                Logger.WarningS("statushost", "OnStatusRequest is not set, responding with a 501.");
                response.Respond(method, "", HttpStatusCode.NotImplemented, "text/plain");
                return(true);
            }

            response.StatusCode        = (int)HttpStatusCode.OK;
            response.StatusDescription = "OK";
            response.ContentType       = "application/json";
            response.ContentEncoding   = EncodingHelpers.UTF8;

            if (method == HttpMethod.Head)
            {
                response.Close();
                return(true);
            }

            var jObject = new JObject();

            OnStatusRequest.Invoke(jObject);
            using (var streamWriter = new StreamWriter(response.OutputStream, EncodingHelpers.UTF8))
                using (var jsonWriter = new JsonTextWriter(streamWriter))
                {
                    var serializer = new JsonSerializer();
                    serializer.Serialize(jsonWriter, jObject);
                    jsonWriter.Flush();
                }

            response.Close();

            return(true);
        }
示例#3
0
        private bool HandleStatus(HttpMethod method, HttpRequest request, HttpResponse response)
        {
            if (!method.IsGetLike() || request.Path != "/status")
            {
                return(false);
            }

            if (OnStatusRequest == null)
            {
                Logger.WarningS(Sawmill, "OnStatusRequest is not set, responding with a 501.");
                response.Respond("Not Implemented", HttpStatusCode.NotImplemented);
                return(true);
            }

            response.StatusCode  = (int)HttpStatusCode.OK;
            response.ContentType = "application/json";

            if (method == HttpMethod.Head)
            {
                return(true);
            }

            var jObject = new JObject();

            OnStatusRequest?.Invoke(jObject);

            using var streamWriter = new StreamWriter(response.Body, EncodingHelpers.UTF8);

            using var jsonWriter = new JsonTextWriter(streamWriter);

            JsonSerializer.Serialize(jsonWriter, jObject);

            jsonWriter.Flush();

            return(true);
        }
示例#4
0
        private void _processRequestInternal(HttpListenerContext context)
        {
            var response = context.Response;
            var request  = context.Request;

            if (request.HttpMethod != "GET" && request.HttpMethod != "HEAD")
            {
                response.StatusCode        = (int)HttpStatusCode.BadRequest;
                response.StatusDescription = "Bad Request";
                response.ContentType       = "text/plain";
                _respondText(response, "400 Bad Request", false);
                return;
            }

            var head = request.HttpMethod == "HEAD";

            try
            {
                var uri = request.Url;
                if (uri.AbsolutePath == "/teapot")
                {
                    response.StatusCode        = 418; // >HttpStatusCode doesn't include 418.
                    response.StatusDescription = "I'm a teapot";
                    response.ContentType       = "text/plain";
                    _respondText(response, "The requested entity body is short and stout.", head);
                }
                else if (uri.AbsolutePath == "/status")
                {
                    if (OnStatusRequest == null)
                    {
                        response.StatusCode        = (int)HttpStatusCode.NotImplemented;
                        response.StatusDescription = "Not Implemented";
                        response.ContentType       = "text/plain";
                        _respondText(response, "501 Not Implemented", head);
                        Logger.WarningS("statushost", "OnStatusRequest is not set, responding with a 501.");
                        return;
                    }

                    response.StatusCode        = (int)HttpStatusCode.OK;
                    response.StatusDescription = "OK";
                    response.ContentType       = "application/json";
                    response.ContentEncoding   = EncodingHelpers.UTF8;

                    if (head)
                    {
                        response.OutputStream.Close();
                        return;
                    }

                    var jObject = new JObject();
                    OnStatusRequest?.Invoke(jObject);
                    using (var streamWriter = new StreamWriter(response.OutputStream, EncodingHelpers.UTF8))
                        using (var jsonWriter = new JsonTextWriter(streamWriter))
                        {
                            var serializer = new JsonSerializer();
                            serializer.Serialize(jsonWriter, jObject);
                            jsonWriter.Flush();
                        }

                    response.OutputStream.Close();
                }
                else
                {
                    response.StatusCode        = (int)HttpStatusCode.NotFound;
                    response.StatusDescription = "Not Found";
                    response.ContentType       = "text/plain";
                    _respondText(response, "404 Not Found", head);
                }
            }
            catch (Exception e)
            {
                response.StatusCode        = (int)HttpStatusCode.InternalServerError;
                response.StatusDescription = "Internal Server Error";
                response.ContentType       = "text/plain";
                _respondText(response, "500 Internal Server Error", head);
                Logger.ErrorS("statushost", "Exception in StatusHost: {0}", e);
            }
        }
示例#5
0
 public void RequestStatus(RequestContext context)
 {
     _logger.LogDebug("RequestStatus");
     OnStatusRequest?.Invoke(context);
 }