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); }
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); }
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); }
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); } }
public void RequestStatus(RequestContext context) { _logger.LogDebug("RequestStatus"); OnStatusRequest?.Invoke(context); }