Ignore:
Timestamp:
Jul 31, 2023, 4:06:13 PM (16 months ago)
Author:
alloc
Message:

25_30_44

  • Got rid (mostly) of custom JSON serialization
  • Some code cleanup
File:
1 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements/MapRendering/API/GetServerInfo.cs

    r454 r455  
    11using System;
    2 using AllocsFixes.JSON;
     2using JetBrains.Annotations;
     3using Utf8Json;
    34using Webserver;
    45using Webserver.WebAPI;
    56
    67namespace AllocsFixes.WebAPIs {
     8        [UsedImplicitly]
    79        public class GetServerInfo : AbsWebAPI {
     10                private static readonly byte[] jsonKeyType = JsonWriter.GetEncodedPropertyNameWithBeginObject ("type");
     11                private static readonly byte[] jsonKeyValue = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("value");
     12
    813                public override void HandleRequest (RequestContext _context) {
    9                         JSONObject serverInfo = new JSONObject ();
     14                        GameServerInfo gsi = ConnectionManager.Instance.LocalServerInfo;
    1015
    11                         GameServerInfo gsi = ConnectionManager.Instance.LocalServerInfo;
     16                        JsonWriter writer = new JsonWriter ();
     17                        writer.WriteBeginObject ();
     18
     19                        bool first = true;
    1220
    1321                        foreach (string stringGamePref in Enum.GetNames (typeof (GameInfoString))) {
    1422                                string value = gsi.GetValue ((GameInfoString) Enum.Parse (typeof (GameInfoString), stringGamePref));
     23                               
     24                                if (!first) {
     25                                        writer.WriteValueSeparator ();
     26                                }
    1527
    16                                 JSONObject singleStat = new JSONObject ();
    17                                 singleStat.Add ("type", new JSONString ("string"));
    18                                 singleStat.Add ("value", new JSONString (value));
     28                                first = false;
    1929
    20                                 serverInfo.Add (stringGamePref, singleStat);
     30                                writer.WritePropertyName (stringGamePref);
     31                                writer.WriteRaw (jsonKeyType);
     32                                writer.WriteString ("string");
     33                               
     34                                writer.WriteRaw (jsonKeyValue);
     35                                writer.WriteString (value);
     36                               
     37                                writer.WriteEndObject ();
    2138                        }
    2239
     
    2441                                int value = gsi.GetValue ((GameInfoInt) Enum.Parse (typeof (GameInfoInt), intGamePref));
    2542
    26                                 JSONObject singleStat = new JSONObject ();
    27                                 singleStat.Add ("type", new JSONString ("int"));
    28                                 singleStat.Add ("value", new JSONNumber (value));
     43                                if (!first) {
     44                                        writer.WriteValueSeparator ();
     45                                }
    2946
    30                                 serverInfo.Add (intGamePref, singleStat);
     47                                first = false;
     48
     49                                writer.WritePropertyName (intGamePref);
     50                                writer.WriteRaw (jsonKeyType);
     51                                writer.WriteString ("int");
     52                               
     53                                writer.WriteRaw (jsonKeyValue);
     54                                writer.WriteInt32 (value);
     55                               
     56                                writer.WriteEndObject ();
    3157                        }
    3258
     
    3460                                bool value = gsi.GetValue ((GameInfoBool) Enum.Parse (typeof (GameInfoBool), boolGamePref));
    3561
    36                                 JSONObject singleStat = new JSONObject ();
    37                                 singleStat.Add ("type", new JSONString ("bool"));
    38                                 singleStat.Add ("value", new JSONBoolean (value));
     62                                if (!first) {
     63                                        writer.WriteValueSeparator ();
     64                                }
    3965
    40                                 serverInfo.Add (boolGamePref, singleStat);
     66                                first = false;
     67
     68                                writer.WritePropertyName (boolGamePref);
     69                                writer.WriteRaw (jsonKeyType);
     70                                writer.WriteString ("bool");
     71                               
     72                                writer.WriteRaw (jsonKeyValue);
     73                                writer.WriteBoolean (value);
     74                               
     75                                writer.WriteEndObject ();
    4176                        }
    42 
    43 
    44                         LegacyApiHelper.WriteJSON (_context.Response, serverInfo);
     77                       
     78                        writer.WriteEndObject ();
     79                       
     80                        WebUtils.WriteJsonData (_context.Response, ref writer);
    4581                }
    4682        }
Note: See TracChangeset for help on using the changeset viewer.