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);
}
}
}