[325] | 1 | using System.Collections.Generic;
|
---|
[233] | 2 | using AllocsFixes.PersistentData;
|
---|
[455] | 3 | using JetBrains.Annotations;
|
---|
| 4 | using Utf8Json;
|
---|
[454] | 5 | using Webserver;
|
---|
| 6 | using Webserver.WebAPI;
|
---|
[230] | 7 |
|
---|
[454] | 8 | namespace AllocsFixes.WebAPIs {
|
---|
[455] | 9 | [UsedImplicitly]
|
---|
[454] | 10 | public class GetPlayersOnline : AbsWebAPI {
|
---|
[455] | 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 |
|
---|
[454] | 31 | public override void HandleRequest (RequestContext _context) {
|
---|
[455] | 32 | JsonWriter writer = new JsonWriter ();
|
---|
| 33 |
|
---|
| 34 | writer.WriteBeginArray ();
|
---|
| 35 |
|
---|
| 36 | bool first = true;
|
---|
[230] | 37 |
|
---|
| 38 | World w = GameManager.Instance.World;
|
---|
| 39 | foreach (KeyValuePair<int, EntityPlayer> current in w.Players.dict) {
|
---|
[324] | 40 | ClientInfo ci = ConnectionManager.Instance.Clients.ForEntityId (current.Key);
|
---|
[446] | 41 | Player player = PersistentContainer.Instance.Players.GetByInternalId (ci.InternalId);
|
---|
[230] | 42 |
|
---|
[455] | 43 | if (!first) {
|
---|
| 44 | writer.WriteValueSeparator ();
|
---|
| 45 | }
|
---|
[230] | 46 |
|
---|
[455] | 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);
|
---|
[230] | 90 |
|
---|
[455] | 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);
|
---|
[233] | 96 |
|
---|
[455] | 97 | writer.WriteRaw (jsonKeyPing);
|
---|
| 98 | writer.WriteInt32 (ci.ping);
|
---|
| 99 |
|
---|
| 100 | writer.WriteEndObject ();
|
---|
[230] | 101 | }
|
---|
[455] | 102 |
|
---|
| 103 | writer.WriteEndArray ();
|
---|
| 104 |
|
---|
| 105 | WebUtils.WriteJsonData (_context.Response, ref writer);
|
---|
[230] | 106 | }
|
---|
| 107 | }
|
---|
[325] | 108 | }
|
---|