You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.2 KiB
C#

#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2026 WenJY
* CLR4.0.30319.42000
* Mr.Wen's MacBook Pro
* Sln.IntelliBelt.WebSocket
* FFEDD207-020C-4D9F-90BB-9AAE56AC9C42
*
* WenJY
*
* 2026-04-24 15:19:42
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
using Fleck;
using Sln.IntelliBelt.Serilog;
namespace Sln.IntelliBelt.WebSocket;
public class WebSocketHelper
{
private List<IWebSocketConnection> _sockets;
private readonly SerilogHelper _logger;
public delegate void ReceivedMessageRequestInfo(string msg);
public event ReceivedMessageRequestInfo ReceivedMessageRequestInfoEvent;
public WebSocketHelper(SerilogHelper serilogHelper,List<IWebSocketConnection> sockets)
{
_logger = serilogHelper;
_sockets = sockets;
}
public void Init(int port)
{
var server = new Fleck.WebSocketServer($"ws://0.0.0.0:{port}");
server.Start(socket =>
{
socket.OnOpen = () =>
{
var data = socket.ConnectionInfo;
_logger.Info("WebSocket Open!");
_sockets.Add(socket);
};
socket.OnClose = () =>
{
_logger.Info("WebSocket Close!");
_sockets.Remove(socket);
};
socket.OnMessage = message =>
{
ReceivedMessageRequestInfoEvent?.Invoke(message);
};
});
}
public void PushMsg(string msg)
{
try
{
foreach (var socket in _sockets)
{
socket.Send(msg);
_logger.Info($"WebSocket推送信息:{msg}");
}
}
catch (Exception ex)
{
_logger.Info($"WebSocket推送信息异常:{ex.Message}");
}
}
}