AsyncJsonSubCommand.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace SuperWebSocket.SubProtocol
  6. {
  7. /// <summary>
  8. /// Async json sub command
  9. /// </summary>
  10. /// <typeparam name="TJsonCommandInfo">The type of the json command info.</typeparam>
  11. public abstract class AsyncJsonSubCommand<TJsonCommandInfo> : AsyncJsonSubCommand<WebSocketSession, TJsonCommandInfo>
  12. {
  13. }
  14. /// <summary>
  15. /// Async json sub command
  16. /// </summary>
  17. /// <typeparam name="TWebSocketSession">The type of the web socket session.</typeparam>
  18. /// <typeparam name="TJsonCommandInfo">The type of the json command info.</typeparam>
  19. public abstract class AsyncJsonSubCommand<TWebSocketSession, TJsonCommandInfo> : JsonSubCommandBase<TWebSocketSession, TJsonCommandInfo>
  20. where TWebSocketSession : WebSocketSession<TWebSocketSession>, new()
  21. {
  22. private Action<TWebSocketSession, string, TJsonCommandInfo> m_AsyncJsonCommandAction;
  23. /// <summary>
  24. /// Initializes a new instance of the <see cref="AsyncJsonSubCommand&lt;TWebSocketSession, TJsonCommandInfo&gt;"/> class.
  25. /// </summary>
  26. public AsyncJsonSubCommand()
  27. {
  28. m_AsyncJsonCommandAction = ExecuteAsyncJsonCommand;
  29. }
  30. /// <summary>
  31. /// Executes the json command.
  32. /// </summary>
  33. /// <param name="session">The session.</param>
  34. /// <param name="commandInfo">The command info.</param>
  35. protected override void ExecuteJsonCommand(TWebSocketSession session, TJsonCommandInfo commandInfo)
  36. {
  37. m_AsyncJsonCommandAction.BeginInvoke(session, session.CurrentToken, commandInfo, null, session);
  38. }
  39. /// <summary>
  40. /// Executes the async json command.
  41. /// </summary>
  42. /// <param name="session">The session.</param>
  43. /// <param name="token">The token.</param>
  44. /// <param name="commandInfo">The command info.</param>
  45. protected abstract void ExecuteAsyncJsonCommand(TWebSocketSession session, string token, TJsonCommandInfo commandInfo);
  46. private void OnAsyncJsonCommandExecuted(IAsyncResult result)
  47. {
  48. var session = (TWebSocketSession)result.AsyncState;
  49. try
  50. {
  51. m_AsyncJsonCommandAction.EndInvoke(result);
  52. }
  53. catch (Exception e)
  54. {
  55. session.Logger.Error(e);
  56. }
  57. }
  58. /// <summary>
  59. /// Sends the json message.
  60. /// </summary>
  61. /// <param name="session">The session.</param>
  62. /// <param name="token">The token.</param>
  63. /// <param name="content">The content.</param>
  64. protected void SendJsonMessage(TWebSocketSession session, string token, object content)
  65. {
  66. session.Send(GetJsonMessage(session, this.Name, token, content));
  67. }
  68. /// <summary>
  69. /// Sends the json message.
  70. /// </summary>
  71. /// <param name="session">The session.</param>
  72. /// <param name="name">The name.</param>
  73. /// <param name="token">The token.</param>
  74. /// <param name="content">The content.</param>
  75. protected void SendJsonMessage(TWebSocketSession session, string name, string token, object content)
  76. {
  77. session.Send(GetJsonMessage(session, name, token, content));
  78. }
  79. }
  80. }