AsyncJsonSubCommand.cs 3.5 KB

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