MessageFactory.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace SocketIOClient.Messages
  5. {
  6. public static class MessageFactory
  7. {
  8. private static IMessage CreateMessage(MessageType type)
  9. {
  10. switch (type)
  11. {
  12. case MessageType.Opened:
  13. return new OpenedMessage();
  14. case MessageType.Ping:
  15. return new PingMessage();
  16. case MessageType.Pong:
  17. return new PongMessage();
  18. case MessageType.Connected:
  19. return new ConnectedMessage();
  20. case MessageType.Disconnected:
  21. return new DisconnectedMessage();
  22. case MessageType.EventMessage:
  23. return new EventMessage();
  24. case MessageType.AckMessage:
  25. return new ClientAckMessage();
  26. case MessageType.ErrorMessage:
  27. return new ErrorMessage();
  28. case MessageType.BinaryMessage:
  29. return new BinaryMessage();
  30. case MessageType.BinaryAckMessage:
  31. return new ClientBinaryAckMessage();
  32. }
  33. return null;
  34. }
  35. public static IMessage CreateMessage(int eio, string msg)
  36. {
  37. var enums = Enum.GetValues(typeof(MessageType));
  38. foreach (MessageType item in enums)
  39. {
  40. string prefix = ((int)item).ToString();
  41. if (msg.StartsWith(prefix))
  42. {
  43. IMessage result = CreateMessage(item);
  44. if (result != null)
  45. {
  46. result.Eio = eio;
  47. result.Read(msg.Substring(prefix.Length));
  48. return result;
  49. }
  50. }
  51. }
  52. return null;
  53. }
  54. public static OpenedMessage CreateOpenedMessage(string msg)
  55. {
  56. var openedMessage = new OpenedMessage();
  57. if (msg[0] == '0')
  58. {
  59. openedMessage.Eio = 4;
  60. openedMessage.Read(msg.Substring(1));
  61. }
  62. else
  63. {
  64. openedMessage.Eio = 3;
  65. int index = msg.IndexOf(':');
  66. openedMessage.Read(msg.Substring(index + 2));
  67. }
  68. return openedMessage;
  69. }
  70. }
  71. }