MessageAckParser.cs 1014 B

123456789101112131415161718192021222324252627282930
  1. using EZXR.Glass.Network.SocketIOClient.Arguments;
  2. using System.Text.RegularExpressions;
  3. using System.Threading.Tasks;
  4. namespace EZXR.Glass.Network.SocketIOClient.Parsers
  5. {
  6. class MessageAckParser : IParser
  7. {
  8. public Task ParseAsync(ResponseTextParser rtp)
  9. {
  10. var regex = new Regex($@"^43{rtp.Namespace}(\d+)\[([\s\S]*)\]$");
  11. if (regex.IsMatch(rtp.Text))
  12. {
  13. var groups = regex.Match(rtp.Text).Groups;
  14. int packetId = int.Parse(groups[1].Value);
  15. if (rtp.Socket.Callbacks.ContainsKey(packetId))
  16. {
  17. var handler = rtp.Socket.Callbacks[packetId];
  18. handler(new ResponseArgs
  19. {
  20. Text = groups[2].Value,
  21. RawText = rtp.Text
  22. });
  23. rtp.Socket.Callbacks.Remove(packetId);
  24. }
  25. }
  26. return Task.CompletedTask;
  27. }
  28. }
  29. }