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

72 lines
2.1 KiB

using EC.Utils;
using EC.Utils.ZMQ;
using Fleck;
using System;
using System.Collections.Generic;
using System.Linq;
namespace ECMonitor.Manager
{
public class WebSocketManager
{
private WebSocketServer _webSocketServer = null;
private List<IWebSocketConnection> allSockets = new List<IWebSocketConnection>();
public event EventHandler<PubSubModel> OnDataReceived; //定义一个委托类型的事件
public WebSocketManager()
{
FleckLog.Level = LogLevel.Debug;
_webSocketServer = new WebSocketServer("ws://0.0.0.0:" + ConfigHelper.WebSocketSvrPort());
}
public void Start()
{
_webSocketServer.Start(socket =>
{
socket.OnOpen = () =>
{
// Console.WriteLine("Open!");
allSockets.Add(socket);
};
socket.OnClose = () =>
{
Console.WriteLine("Close!");
allSockets.Remove(socket);
};
socket.OnMessage = message =>
{
//Console.WriteLine(message);
// allSockets.ToList().ForEach(s => s.Send("Echo: " + message));
WebSocketDataReceived(socket, message);
};
});
}
public void Stop()
{
allSockets.ToList().ForEach(s => s.Close());
_webSocketServer.Dispose();
}
private void WebSocketDataReceived(object sender, string message)
{
try
{
if (message.IndexOf("topic") > 0)
{
PubSubModel pubSubModel = message.ToObject<PubSubModel>();
if (pubSubModel != null)
{
OnDataReceived?.Invoke(this, pubSubModel);
}
}
}
catch (Exception ex)
{
LogFactory.GetLogger().Error(ex);
}
}
}
}