SocketIOResponse.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System.Collections.Generic;
  2. using System.Text;
  3. using System.Text.Json;
  4. using System.Threading;
  5. using System.Threading.Tasks;
  6. namespace SocketIOClient
  7. {
  8. public class SocketIOResponse
  9. {
  10. public SocketIOResponse(IList<JsonElement> array, SocketIO socket)
  11. {
  12. _array = array;
  13. InComingBytes = new List<byte[]>();
  14. SocketIO = socket;
  15. PacketId = -1;
  16. }
  17. readonly IList<JsonElement> _array;
  18. public List<byte[]> InComingBytes { get; }
  19. public SocketIO SocketIO { get; }
  20. public int PacketId { get; set; }
  21. public T GetValue<T>(int index = 0)
  22. {
  23. var element = GetValue(index);
  24. string json = element.GetRawText();
  25. return SocketIO.JsonSerializer.Deserialize<T>(json, InComingBytes);
  26. }
  27. public JsonElement GetValue(int index = 0) => _array[index];
  28. public int Count => _array.Count;
  29. public override string ToString()
  30. {
  31. var builder = new StringBuilder();
  32. builder.Append('[');
  33. foreach (var item in _array)
  34. {
  35. builder.Append(item.GetRawText());
  36. if (_array.IndexOf(item) < _array.Count - 1)
  37. {
  38. builder.Append(',');
  39. }
  40. }
  41. builder.Append(']');
  42. return builder.ToString();
  43. }
  44. public async Task CallbackAsync(params object[] data)
  45. {
  46. await SocketIO.ClientAckAsync(PacketId, CancellationToken.None, data).ConfigureAwait(false);
  47. }
  48. public async Task CallbackAsync(CancellationToken cancellationToken, params object[] data)
  49. {
  50. await SocketIO.ClientAckAsync(PacketId, cancellationToken, data).ConfigureAwait(false);
  51. }
  52. }
  53. }