OpenedMessage.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System;
  2. using System.Text.Json;
  3. using System.Collections.Generic;
  4. using SocketIOClient.Transport;
  5. namespace SocketIOClient.Messages
  6. {
  7. public class OpenedMessage : IMessage
  8. {
  9. public MessageType Type => MessageType.Opened;
  10. public string Sid { get; set; }
  11. public string Namespace { get; set; }
  12. public List<string> Upgrades { get; private set; }
  13. public int PingInterval { get; private set; }
  14. public int PingTimeout { get; private set; }
  15. public List<byte[]> OutgoingBytes { get; set; }
  16. public List<byte[]> IncomingBytes { get; set; }
  17. public int BinaryCount { get; }
  18. public int Eio { get; set; }
  19. public TransportProtocol Protocol { get; set; }
  20. private int GetInt32FromJsonElement(JsonElement element, string msg, string name)
  21. {
  22. var p = element.GetProperty(name);
  23. int val;
  24. switch (p.ValueKind)
  25. {
  26. case JsonValueKind.String:
  27. val = int.Parse(p.GetString());
  28. break;
  29. case JsonValueKind.Number:
  30. val = p.GetInt32();
  31. break;
  32. default:
  33. throw new ArgumentException($"Invalid message: '{msg}'");
  34. }
  35. return val;
  36. }
  37. public void Read(string msg)
  38. {
  39. var doc = JsonDocument.Parse(msg);
  40. var root = doc.RootElement;
  41. Sid = root.GetProperty("sid").GetString();
  42. PingInterval = GetInt32FromJsonElement(root, msg, "pingInterval");
  43. PingTimeout = GetInt32FromJsonElement(root, msg, "pingTimeout");
  44. Upgrades = new List<string>();
  45. var upgrades = root.GetProperty("upgrades").EnumerateArray();
  46. foreach (var item in upgrades)
  47. {
  48. Upgrades.Add(item.GetString());
  49. }
  50. }
  51. public string Write()
  52. {
  53. //var builder = new StringBuilder();
  54. //builder.Append("40");
  55. //if (!string.IsNullOrEmpty(Namespace))
  56. //{
  57. // builder.Append(Namespace).Append(',');
  58. //}
  59. //return builder.ToString();
  60. throw new NotImplementedException();
  61. }
  62. }
  63. }