source: binary-improvements2/WebServer/src/WebAPI/APIs/Hostile.cs@ 402

Last change on this file since 402 was 402, checked in by alloc, 22 months ago
  • Major refactoring
  • Using Utf8Json for (de)serialization
  • Moving APIs to REST
  • Removing dependencies from WebServer and MapRenderer to ServerFixes
File size: 1.5 KB
Line 
1using System.Collections.Generic;
2using JetBrains.Annotations;
3using Utf8Json;
4using Webserver.LiveData;
5
6namespace Webserver.WebAPI.APIs {
7 [UsedImplicitly]
8 internal class Hostile : AbsRestApi {
9 private readonly List<EntityEnemy> entities = new List<EntityEnemy> ();
10
11 private static readonly byte[] jsonKeyId = JsonWriter.GetEncodedPropertyNameWithBeginObject ("id");
12 private static readonly byte[] jsonKeyName = JsonWriter.GetEncodedPropertyNameWithBeginObject ("name");
13 private static readonly byte[] jsonKeyPosition = JsonWriter.GetEncodedPropertyNameWithBeginObject ("position");
14
15 protected override void HandleRestGet (RequestContext _context) {
16 PrepareEnvelopedResult (out JsonWriter writer);
17 writer.WriteBeginArray ();
18
19 lock (entities) {
20 Hostiles.Instance.Get (entities);
21
22 for (int i = 0; i < entities.Count; i++) {
23 if (i > 0) {
24 writer.WriteValueSeparator ();
25 }
26
27 EntityAlive entity = entities [i];
28 Vector3i position = new Vector3i (entity.GetPosition ());
29
30 writer.WriteRaw (jsonKeyId);
31 writer.WriteInt32 (entity.entityId);
32
33 writer.WriteRaw (jsonKeyName);
34 writer.WriteString (!string.IsNullOrEmpty (entity.EntityName) ? entity.EntityName : $"enemy class #{entity.entityClass}");
35
36 writer.WriteRaw (jsonKeyPosition);
37 JsonCommons.WritePositionObject (writer, position);
38
39 writer.WriteEndObject ();
40 }
41 }
42
43 writer.WriteEndArray ();
44 SendEnvelopedResult (_context, ref writer);
45 }
46 }
47}
Note: See TracBrowser for help on using the repository browser.