using System; using System.Text; using System.Collections; using System.Collections.Generic; using HPSocket; using HPSocket.WebSocket; namespace HXX.Scanner.Socket { public class biz_Hub : IHub { /// /// 消息到达 /// /// /// /// /// /// /// /// public HandleResult OnMessage(IWebSocketServer sender, IntPtr connId, bool final, OpCode opCode, byte[] mask, byte[] data) { try { if (opCode == OpCode.Text) { var msg = Encoding.UTF8.GetString(data); if (msg == "ping") { sender.Text(connId, "pong"); } else if (msg == "pong") { } else { SocketServerManager.on_message(connId, data); } } else { SocketServerManager.on_message(connId, opCode.ToString()); } return HandleResult.Ok; } catch (Exception ee) { SocketServerManager.on_message(connId, ee.Message); return HandleResult.Error; } } /// /// 连接打开 /// /// /// /// public HandleResult OnOpen(IWebSocketServer sender, IntPtr connId) { var httpServer = (IHttpServer)sender.Http; //var xx = $"OnOpen({connId}), cookie: [{httpServer.GetHeader(connId, "Cookie")}], user-agent: [{httpServer.GetHeader(connId, "User-Agent")}]"; ////Console.WriteLine($"OnOpen({connId}), cookie: [{httpServer.GetHeader(connId, "Cookie")}], user-agent: [{httpServer.GetHeader(connId, "User-Agent")}]"); //if(httpServer.GetListenAddress(out var ip,out var port)) //{ //} //if (httpServer.GetLocalAddress(connId, out var ip2, out var port2)) //{ //} var token = httpServer.GetHeader(connId, "Sec-WebSocket-Protocol"); SocketServerManager.add_client(connId, token); //var str = "{action:\"connect\",code:200,msg:\"ok\"}"; //var bytes = Encoding.UTF8.GetBytes(str); //var ok = sender.Send(connId, OpCode.Text, bytes, bytes.Length); //return ok ? HandleResult.Ok : HandleResult.Error; SocketServerManager.on_connect(connId); return HandleResult.Ok; } /// /// 连接关闭 /// /// /// /// /// /// public HandleResult OnClose(IWebSocketServer sender, IntPtr connId, SocketOperation socketOperation, int errorCode) { SocketServerManager.on_close(connId, sender.GetAllConnectionIds().Count); return HandleResult.Ok; } public void OnPing(IWebSocketServer sender, IntPtr connId, byte[] data) { } public void OnPong(IWebSocketServer sender, IntPtr connId, byte[] data) { var xx = Encoding.UTF8.GetString(data); SocketServerManager.on_message(connId, "on pong"); sender.Pong(connId, data, data.Length); } } }