source: binary-improvements/MapRendering/API/GetPlayersOnline.cs@ 491

Last change on this file since 491 was 455, checked in by alloc, 16 months ago

25_30_44

  • Got rid (mostly) of custom JSON serialization
  • Some code cleanup
File size: 4.5 KB
Line 
1using System.Collections.Generic;
2using AllocsFixes.PersistentData;
3using JetBrains.Annotations;
4using Utf8Json;
5using Webserver;
6using Webserver.WebAPI;
7
8namespace AllocsFixes.WebAPIs {
9 [UsedImplicitly]
10 public class GetPlayersOnline : AbsWebAPI {
11 private static readonly byte[] jsonKeySteamId = JsonWriter.GetEncodedPropertyNameWithBeginObject ("steamid");
12 private static readonly byte[] jsonKeyCrossPlatformId = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("crossplatformid");
13 private static readonly byte[] jsonKeyEntityId = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("entityid");
14 private static readonly byte[] jsonKeyIp = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("ip");
15 private static readonly byte[] jsonKeyName = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("name");
16 private static readonly byte[] jsonKeyOnline = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("online");
17 private static readonly byte[] jsonKeyPosition = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("position");
18
19 private static readonly byte[] jsonKeyLevel = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("level");
20 private static readonly byte[] jsonKeyHealth = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("health");
21 private static readonly byte[] jsonKeyStamina = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("stamina");
22 private static readonly byte[] jsonKeyZombieKills = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("zombiekills");
23 private static readonly byte[] jsonKeyPlayerKills = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("playerkills");
24 private static readonly byte[] jsonKeyPlayerDeaths = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("playerdeaths");
25 private static readonly byte[] jsonKeyScore = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("score");
26
27 private static readonly byte[] jsonKeyTotalPlaytime = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("totalplaytime");
28 private static readonly byte[] jsonKeyLastOnline = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("lastonline");
29 private static readonly byte[] jsonKeyPing = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("ping");
30
31 public override void HandleRequest (RequestContext _context) {
32 JsonWriter writer = new JsonWriter ();
33
34 writer.WriteBeginArray ();
35
36 bool first = true;
37
38 World w = GameManager.Instance.World;
39 foreach (KeyValuePair<int, EntityPlayer> current in w.Players.dict) {
40 ClientInfo ci = ConnectionManager.Instance.Clients.ForEntityId (current.Key);
41 Player player = PersistentContainer.Instance.Players.GetByInternalId (ci.InternalId);
42
43 if (!first) {
44 writer.WriteValueSeparator ();
45 }
46
47 first = false;
48
49 writer.WriteRaw (jsonKeySteamId);
50 writer.WriteString (ci.PlatformId.CombinedString);
51
52 writer.WriteRaw (jsonKeyCrossPlatformId);
53 writer.WriteString (ci.CrossplatformId?.CombinedString ?? "");
54
55 writer.WriteRaw (jsonKeyEntityId);
56 writer.WriteInt32 (ci.entityId);
57
58 writer.WriteRaw (jsonKeyIp);
59 writer.WriteString (ci.ip);
60
61 writer.WriteRaw (jsonKeyName);
62 writer.WriteString (current.Value.EntityName);
63
64 writer.WriteRaw (jsonKeyOnline);
65 writer.WriteBoolean (true);
66
67 writer.WriteRaw (jsonKeyPosition);
68 JsonCommons.WriteVector3I (ref writer, new Vector3i (current.Value.GetPosition ()));
69
70 writer.WriteRaw (jsonKeyLevel);
71 writer.WriteSingle (player?.Level ?? -1);
72
73 writer.WriteRaw (jsonKeyHealth);
74 writer.WriteInt32 (current.Value.Health);
75
76 writer.WriteRaw (jsonKeyStamina);
77 writer.WriteSingle (current.Value.Stamina);
78
79 writer.WriteRaw (jsonKeyZombieKills);
80 writer.WriteInt32 (current.Value.KilledZombies);
81
82 writer.WriteRaw (jsonKeyPlayerKills);
83 writer.WriteInt32 (current.Value.KilledPlayers);
84
85 writer.WriteRaw (jsonKeyPlayerDeaths);
86 writer.WriteInt32 (current.Value.Died);
87
88 writer.WriteRaw (jsonKeyScore);
89 writer.WriteInt32 (current.Value.Score);
90
91 writer.WriteRaw (jsonKeyTotalPlaytime);
92 writer.WriteInt64 (player?.TotalPlayTime ?? -1);
93
94 writer.WriteRaw (jsonKeyLastOnline);
95 writer.WriteString (player != null ? player.LastOnline.ToString ("s") : string.Empty);
96
97 writer.WriteRaw (jsonKeyPing);
98 writer.WriteInt32 (ci.ping);
99
100 writer.WriteEndObject ();
101 }
102
103 writer.WriteEndArray ();
104
105 WebUtils.WriteJsonData (_context.Response, ref writer);
106 }
107 }
108}
Note: See TracBrowser for help on using the repository browser.