biz_Hub.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using System;
  2. using System.Text;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using HPSocket;
  6. using HPSocket.WebSocket;
  7. namespace HXX.Scanner.Socket
  8. {
  9. public class biz_Hub : IHub
  10. {
  11. /// <summary>
  12. /// 消息到达
  13. /// </summary>
  14. /// <param name="sender"></param>
  15. /// <param name="connId"></param>
  16. /// <param name="final"></param>
  17. /// <param name="opCode"></param>
  18. /// <param name="mask"></param>
  19. /// <param name="data"></param>
  20. /// <returns></returns>
  21. public HandleResult OnMessage(IWebSocketServer sender, IntPtr connId, bool final, OpCode opCode, byte[] mask, byte[] data)
  22. {
  23. try
  24. {
  25. if (opCode == OpCode.Text)
  26. {
  27. var msg = Encoding.UTF8.GetString(data);
  28. if (msg == "ping")
  29. {
  30. sender.Text(connId, "pong");
  31. }
  32. else if (msg == "pong")
  33. {
  34. }
  35. else
  36. {
  37. SocketServerManager.on_message(connId, data);
  38. }
  39. }
  40. else
  41. {
  42. SocketServerManager.on_message(connId, opCode.ToString());
  43. }
  44. return HandleResult.Ok;
  45. }
  46. catch (Exception ee)
  47. {
  48. SocketServerManager.on_message(connId, ee.Message);
  49. return HandleResult.Error;
  50. }
  51. }
  52. /// <summary>
  53. /// 连接打开
  54. /// </summary>
  55. /// <param name="sender"></param>
  56. /// <param name="connId"></param>
  57. /// <returns></returns>
  58. public HandleResult OnOpen(IWebSocketServer sender, IntPtr connId)
  59. {
  60. var httpServer = (IHttpServer)sender.Http;
  61. //var xx = $"OnOpen({connId}), cookie: [{httpServer.GetHeader(connId, "Cookie")}], user-agent: [{httpServer.GetHeader(connId, "User-Agent")}]";
  62. ////Console.WriteLine($"OnOpen({connId}), cookie: [{httpServer.GetHeader(connId, "Cookie")}], user-agent: [{httpServer.GetHeader(connId, "User-Agent")}]");
  63. //if(httpServer.GetListenAddress(out var ip,out var port))
  64. //{
  65. //}
  66. //if (httpServer.GetLocalAddress(connId, out var ip2, out var port2))
  67. //{
  68. //}
  69. var token = httpServer.GetHeader(connId, "Sec-WebSocket-Protocol");
  70. SocketServerManager.add_client(connId, token);
  71. //var str = "{action:\"connect\",code:200,msg:\"ok\"}";
  72. //var bytes = Encoding.UTF8.GetBytes(str);
  73. //var ok = sender.Send(connId, OpCode.Text, bytes, bytes.Length);
  74. //return ok ? HandleResult.Ok : HandleResult.Error;
  75. SocketServerManager.on_connect(connId);
  76. return HandleResult.Ok;
  77. }
  78. /// <summary>
  79. /// 连接关闭
  80. /// </summary>
  81. /// <param name="sender"></param>
  82. /// <param name="connId"></param>
  83. /// <param name="socketOperation"></param>
  84. /// <param name="errorCode"></param>
  85. /// <returns></returns>
  86. public HandleResult OnClose(IWebSocketServer sender, IntPtr connId, SocketOperation socketOperation, int errorCode)
  87. {
  88. SocketServerManager.on_close(connId, sender.GetAllConnectionIds().Count);
  89. return HandleResult.Ok;
  90. }
  91. public void OnPing(IWebSocketServer sender, IntPtr connId, byte[] data)
  92. {
  93. }
  94. public void OnPong(IWebSocketServer sender, IntPtr connId, byte[] data)
  95. {
  96. var xx = Encoding.UTF8.GetString(data);
  97. SocketServerManager.on_message(connId, "on pong");
  98. sender.Pong(connId, data, data.Length);
  99. }
  100. }
  101. }