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/GetLandClaims.cs

    r454 r455  
    11using System.Collections.Generic;
    22using System.Net;
    3 using AllocsFixes.JSON;
    43using AllocsFixes.PersistentData;
     4using JetBrains.Annotations;
     5using Utf8Json;
    56using Webserver;
    67using Webserver.Permissions;
     
    89
    910namespace AllocsFixes.WebAPIs {
     11        [UsedImplicitly]
    1012        public class GetLandClaims : AbsWebAPI {
     13                private static readonly byte[] jsonKeyClaimSize = JsonWriter.GetEncodedPropertyNameWithBeginObject ("claimsize");
     14                private static readonly byte[] jsonKeyClaimOwners = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("claimowners");
     15
     16                private static readonly byte[] jsonKeySteamId = JsonWriter.GetEncodedPropertyNameWithBeginObject ("steamid");
     17                private static readonly byte[] jsonKeyCrossPlatformId = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("crossplatformid");
     18                private static readonly byte[] jsonKeyClaimActive = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("claimactive");
     19                private static readonly byte[] jsonKeyPlayerName = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("playername");
     20                private static readonly byte[] jsonKeyClaims = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("claims");
     21
    1122                public override void HandleRequest (RequestContext _context) {
    1223                        PlatformUserIdentifierAbs requestedUserId = null;
     
    2334                        bool bViewAll = PermissionUtils.CanViewAllClaims (_context.PermissionLevel);
    2435
    25                         JSONObject result = new JSONObject ();
    26                         result.Add ("claimsize", new JSONNumber (GamePrefs.GetInt (EnumUtils.Parse<EnumGamePrefs> (nameof(EnumGamePrefs.LandClaimSize)))));
    27 
    28                         JSONArray claimOwners = new JSONArray ();
    29                         result.Add ("claimowners", claimOwners);
    30 
    3136                        LandClaimList.OwnerFilter[] ownerFilters = null;
    3237                        if (requestedUserId != null || !bViewAll) {
     
    3439                                        ownerFilters = new[] {
    3540                                                LandClaimList.UserIdFilter (userId),
    36                                                 LandClaimList.UserIdFilter (requestedUserId)
     41                                                LandClaimList.UserIdFilter (requestedUserId),
    3742                                        };
    3843                                } else if (!bViewAll) {
     
    4752                        Dictionary<Player, List<Vector3i>> claims = LandClaimList.GetLandClaims (ownerFilters, posFilters);
    4853
     54                        JsonWriter writer = new JsonWriter ();
     55                       
     56                        writer.WriteRaw (jsonKeyClaimSize);
     57                        writer.WriteInt32 (GamePrefs.GetInt (EnumUtils.Parse<EnumGamePrefs> (nameof(EnumGamePrefs.LandClaimSize))));
     58                       
     59                        writer.WriteRaw (jsonKeyClaimOwners);
     60                        writer.WriteBeginArray ();
     61                       
     62                        bool first = true;
     63
    4964                        foreach (KeyValuePair<Player, List<Vector3i>> kvp in claims) {
    50                                 JSONObject owner = new JSONObject ();
    51                                 claimOwners.Add (owner);
    52 
    53                                 owner.Add ("steamid", new JSONString (kvp.Key.PlatformId?.CombinedString ?? ""));
    54                                 owner.Add ("crossplatformid", new JSONString (kvp.Key.CrossPlatformId?.CombinedString ?? ""));
    55                                 owner.Add ("claimactive", new JSONBoolean (kvp.Key.LandProtectionActive));
    56 
    57                                 if (kvp.Key.Name.Length > 0) {
    58                                         owner.Add ("playername", new JSONString (kvp.Key.Name));
    59                                 } else {
    60                                         owner.Add ("playername", new JSONNull ());
     65                                if (!first) {
     66                                        writer.WriteValueSeparator ();
    6167                                }
    6268
    63                                 JSONArray claimsJson = new JSONArray ();
    64                                 owner.Add ("claims", claimsJson);
     69                                first = false;
     70                               
     71                                writer.WriteRaw (jsonKeySteamId);
     72                                writer.WriteString (kvp.Key.PlatformId?.CombinedString ?? "");
     73                               
     74                                writer.WriteRaw (jsonKeyCrossPlatformId);
     75                                writer.WriteString (kvp.Key.CrossPlatformId?.CombinedString ?? "");
     76                               
     77                                writer.WriteRaw (jsonKeyClaimActive);
     78                                writer.WriteBoolean (kvp.Key.LandProtectionActive);
     79                               
     80                                writer.WriteRaw (jsonKeyPlayerName);
     81                                if (kvp.Key.Name.Length > 0) {
     82                                        writer.WriteString (kvp.Key.Name);
     83                                } else {
     84                                        writer.WriteNull ();
     85                                }
     86                               
     87                                writer.WriteRaw (jsonKeyClaims);
     88                                writer.WriteBeginArray ();
     89
     90                                bool first2 = true;
    6591
    6692                                foreach (Vector3i v in kvp.Value) {
    67                                         JSONObject claim = new JSONObject ();
    68                                         claim.Add ("x", new JSONNumber (v.x));
    69                                         claim.Add ("y", new JSONNumber (v.y));
    70                                         claim.Add ("z", new JSONNumber (v.z));
     93                                        if (!first2) {
     94                                                writer.WriteValueSeparator ();
     95                                        }
    7196
    72                                         claimsJson.Add (claim);
     97                                        first2 = false;
     98                                       
     99                                        JsonCommons.WriteVector3I (ref writer, v);
    73100                                }
     101                               
     102                                writer.WriteEndArray ();
     103                               
     104                                writer.WriteEndObject ();
    74105                        }
    75106
    76                         LegacyApiHelper.WriteJSON (_context.Response, result);
     107                        writer.WriteEndArray ();
     108                       
     109                        writer.WriteEndObject ();
     110                        WebUtils.WriteJsonData (_context.Response, ref writer);
    77111                }
    78112        }
Note: See TracChangeset for help on using the changeset viewer.