using EC.Utils.ZMQ; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using EC.Utils; using Fleck; namespace ECMonitor.Manager { public class WebSocketManager { WebSocketServer _webSocketServer = null; List allSockets = new List(); public event EventHandler 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(); if (pubSubModel != null) { OnDataReceived?.Invoke(this, pubSubModel); } } } catch(Exception ex) { LogFactory.GetLogger().Error(ex); } } } }