Ignore:
Timestamp:
Jan 27, 2023, 7:28:00 PM (22 months ago)
Author:
alloc
Message:
  • Major refactoring
  • Using Utf8Json for (de)serialization
  • Moving APIs to REST
  • Removing dependencies from WebServer and MapRenderer to ServerFixes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements2/WebServer/src/WebCommandResult.cs

    r399 r402  
    44using System.Net.Sockets;
    55using System.Text;
    6 using AllocsFixes.JSON;
    76using UnityEngine;
    8 using HttpListenerResponse = SpaceWizards.HttpListener.HttpListenerResponse;
     7using Utf8Json;
    98
    109namespace Webserver {
     
    1918                private readonly string parameters;
    2019
    21                 private readonly HttpListenerResponse response;
     20                private readonly RequestContext context;
    2221                private readonly ResultType responseType;
    2322
    24                 public WebCommandResult (string _command, string _parameters, ResultType _responseType, HttpListenerResponse _response) {
    25                         response = _response;
     23                public WebCommandResult (string _command, string _parameters, ResultType _responseType, RequestContext _context) {
     24                        context = _context;
    2625                        command = _command;
    2726                        parameters = _parameters;
     
    2928                }
    3029
     30                private static readonly byte[] jsonRawKey = JsonWriter.GetEncodedPropertyNameWithBeginObject ("resultRaw");
     31               
     32                private static readonly byte[] jsonCommandKey = JsonWriter.GetEncodedPropertyNameWithBeginObject ("command");
     33                private static readonly byte[] jsonParametersKey = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("parameters");
     34                private static readonly byte[] jsonResultKey = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("result");
     35               
    3136                public void SendLines (List<string> _output) {
    3237                        StringBuilder sb = new StringBuilder ();
     
    3540                        }
    3641
     42                        string commandOutput = sb.ToString ();
     43
    3744                        try {
    38                                 response.SendChunked = false;
    39 
    4045                                if (responseType == ResultType.Raw) {
    41                                         WebUtils.WriteText (response, sb.ToString ());
     46                                        WebUtils.WriteText (context.Response, commandOutput);
    4247                                } else {
    43                                         JsonNode result;
     48                                        WebUtils.PrepareEnvelopedResult (out JsonWriter writer);
     49                       
    4450                                        if (responseType == ResultType.ResultOnly) {
    45                                                 result = new JsonString (sb.ToString ());
     51                                                writer.WriteRaw (jsonRawKey);
     52                                                writer.WriteString (commandOutput);
     53                                                writer.WriteEndObject ();
    4654                                        } else {
    47                                                 JsonObject resultObj = new JsonObject ();
    48 
    49                                                 resultObj.Add ("command", new JsonString (command));
    50                                                 resultObj.Add ("parameters", new JsonString (parameters));
    51                                                 resultObj.Add ("result", new JsonString (sb.ToString ()));
    52 
    53                                                 result = resultObj;
     55                                                writer.WriteRaw (jsonCommandKey);
     56                                                writer.WriteString (command);
     57                                               
     58                                                writer.WriteRaw (jsonParametersKey);
     59                                                writer.WriteString (parameters);
     60                                               
     61                                                writer.WriteRaw (jsonResultKey);
     62                                                writer.WriteString (commandOutput);
     63                                               
     64                                                writer.WriteEndObject ();
    5465                                        }
    5566
    56                                         WebUtils.WriteJson (response, result);
     67                                        WebUtils.SendEnvelopedResult (context, ref writer);
    5768                                }
    5869                        } catch (IOException e) {
    5970                                if (e.InnerException is SocketException) {
    60                                         Log.Warning ("[Web] Error in WebCommandResult.SendLines(): Remote host closed connection: " + e.InnerException.Message);
     71                                        Log.Warning ($"[Web] Error in WebCommandResult.SendLines(): Remote host closed connection: {e.InnerException.Message}");
    6172                                } else {
    62                                         Log.Warning ("[Web] Error (IO) in WebCommandResult.SendLines(): " + e);
     73                                        Log.Warning ($"[Web] Error (IO) in WebCommandResult.SendLines(): {e}");
    6374                                }
    6475                        } catch (Exception e) {
    65                                 Log.Warning ("[Web] Error in WebCommandResult.SendLines(): " + e);
     76                                Log.Warning ($"[Web] Error in WebCommandResult.SendLines(): {e}");
    6677                        } finally {
    67                                 response?.Close ();
     78                                context?.Response?.Close ();
    6879                        }
    6980                }
     
    8293
    8394                public string GetDescription () {
    84                         return "WebCommandResult_for_" + command;
     95                        return $"WebCommandResult_for_{command}";
    8596                }
    8697        }
Note: See TracChangeset for help on using the changeset viewer.