1 | using JetBrains.Annotations;
|
---|
2 | using Utf8Json;
|
---|
3 |
|
---|
4 | namespace Webserver.WebAPI.APIs.ServerState {
|
---|
5 | [UsedImplicitly]
|
---|
6 | public class GameStats : AbsRestApi {
|
---|
7 | private static readonly byte[] keyType = JsonWriter.GetEncodedPropertyNameWithBeginObject ("type");
|
---|
8 | private static readonly byte[] keyValue = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("value");
|
---|
9 |
|
---|
10 | private int largestBuffer;
|
---|
11 |
|
---|
12 | protected override void HandleRestGet (RequestContext _context) {
|
---|
13 | PrepareEnvelopedResult (out JsonWriter writer);
|
---|
14 |
|
---|
15 | writer.EnsureCapacity (largestBuffer);
|
---|
16 | writer.WriteBeginObject ();
|
---|
17 |
|
---|
18 | bool first = true;
|
---|
19 | foreach (EnumGameStats stat in EnumUtils.Values<EnumGameStats> ()) {
|
---|
20 | string name = stat.ToStringCached ();
|
---|
21 | global::GameStats.EnumType? type = global::GameStats.GetStatType (stat);
|
---|
22 |
|
---|
23 | if (!first) {
|
---|
24 | writer.WriteValueSeparator ();
|
---|
25 | }
|
---|
26 |
|
---|
27 | first = false;
|
---|
28 |
|
---|
29 | writer.WritePropertyName (name);
|
---|
30 |
|
---|
31 | writer.WriteRaw (keyType);
|
---|
32 | writer.WriteString (type.HasValue ? type.Value.ToStringCached () : "noType");
|
---|
33 |
|
---|
34 | writer.WriteRaw (keyValue);
|
---|
35 | switch (type) {
|
---|
36 | case global::GameStats.EnumType.Int:
|
---|
37 | writer.WriteInt32 (global::GameStats.GetInt (stat));
|
---|
38 | break;
|
---|
39 | case global::GameStats.EnumType.Float:
|
---|
40 | writer.WriteSingle (global::GameStats.GetFloat (stat));
|
---|
41 | break;
|
---|
42 | case global::GameStats.EnumType.String:
|
---|
43 | writer.WriteString (global::GameStats.GetString (stat));
|
---|
44 | break;
|
---|
45 | case global::GameStats.EnumType.Bool:
|
---|
46 | writer.WriteBoolean (global::GameStats.GetBool (stat));
|
---|
47 | break;
|
---|
48 | default:
|
---|
49 | writer.WriteNull ();
|
---|
50 | break;
|
---|
51 | }
|
---|
52 |
|
---|
53 | writer.WriteEndObject ();
|
---|
54 | }
|
---|
55 |
|
---|
56 | writer.WriteEndObject ();
|
---|
57 |
|
---|
58 | int bufferContentSize = writer.CurrentOffset + 128;
|
---|
59 | if (bufferContentSize > largestBuffer) {
|
---|
60 | largestBuffer = bufferContentSize;
|
---|
61 | }
|
---|
62 |
|
---|
63 | SendEnvelopedResult (_context, ref writer);
|
---|
64 | }
|
---|
65 | }
|
---|
66 | }
|
---|