MessageEventParser.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System.Text.RegularExpressions;
  2. using System.Threading.Tasks;
  3. using EZXR.Glass.Network.SocketIOClient.Arguments;
  4. namespace EZXR.Glass.Network.SocketIOClient.Parsers
  5. {
  6. class MessageEventParser : IParser
  7. {
  8. public Task ParseAsync(ResponseTextParser rtp)
  9. {
  10. //Console.WriteLine("text: " + rtp.Text);
  11. //Change
  12. var regex = new Regex($@"[\d\w-]*{rtp.Namespace}\d*\[""([*\s\w-/_]+)"",([\s\S]*)\]$");
  13. if (regex.IsMatch(rtp.Text))
  14. {
  15. var groups = regex.Match(rtp.Text).Groups;
  16. string eventName = groups[1].Value;
  17. var args = new ResponseArgs
  18. {
  19. Text = groups[2].Value,
  20. RawText = rtp.Text
  21. };
  22. if (rtp.Socket.EventHandlers.ContainsKey(eventName))
  23. {
  24. var handler = rtp.Socket.EventHandlers[eventName];
  25. handler(args);
  26. }
  27. else
  28. {
  29. rtp.Socket.InvokeUnhandledEvent(eventName, args);
  30. }
  31. rtp.Socket.InvokeReceivedEvent(eventName, args);
  32. return Task.CompletedTask;
  33. }
  34. else
  35. {
  36. rtp.Parser = new MessageAckParser();
  37. return rtp.ParseAsync();
  38. }
  39. }
  40. }
  41. }