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.
		
		
		
		
		
			
		
			
				
					
					
						
							115 lines
						
					
					
						
							3.4 KiB
						
					
					
				
			
		
		
	
	
							115 lines
						
					
					
						
							3.4 KiB
						
					
					
				using Fleck; | 
						|
using System; | 
						|
using System.Collections.Generic; | 
						|
using System.Linq; | 
						|
using System.Text; | 
						|
using System.Threading.Tasks; | 
						|
 | 
						|
namespace Kingo.PluginServiceInterface | 
						|
{ | 
						|
    public class WebsocketHelper | 
						|
    { | 
						|
 | 
						|
        private WebSocketServer webSocketServer; | 
						|
        public IWebSocketConnection Conn | 
						|
        { | 
						|
            private get { return conn; } | 
						|
            set | 
						|
            { | 
						|
                conn = value; | 
						|
                if (!conns.ContainsKey(value.ConnectionInfo.Id.ToString())) | 
						|
                    conns.Add(value.ConnectionInfo.Id.ToString(), value); | 
						|
                conn.OnClose = () => { }; | 
						|
                conn.OnMessage = message => | 
						|
                { | 
						|
                    if (string.IsNullOrEmpty(message.Trim()) == false) | 
						|
                    { | 
						|
                        //var result = CommandHelper.Exc(message); | 
						|
                        //socket.Send(message + Environment.NewLine); | 
						|
                    } | 
						|
                    OnMessageCallback?.Invoke(message); | 
						|
                }; | 
						|
            } | 
						|
        } | 
						|
        public Dictionary<string, IWebSocketConnection> conns = new Dictionary<string, IWebSocketConnection>(); | 
						|
        public static WebsocketHelper Instance { get; } = new WebsocketHelper(); | 
						|
        public Action<object> ConnectionCallback; | 
						|
        public Action<object> OnMessageCallback; | 
						|
        private IWebSocketConnection conn; | 
						|
 | 
						|
        private WebsocketHelper() | 
						|
        { | 
						|
 | 
						|
        } | 
						|
        /// <summary> | 
						|
        ///  | 
						|
        /// </summary> | 
						|
        /// <param name="port"></param> | 
						|
        public void Start(int port) | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                if (webSocketServer == null) | 
						|
                { | 
						|
                    webSocketServer = new WebSocketServer(string.Format("ws://0.0.0.0:{0}", port)); | 
						|
                } | 
						|
                webSocketServer.Start(ConnectionCallback); | 
						|
                //webSocketServer.Start(socket => | 
						|
                //{ | 
						|
                //    Conn = socket; | 
						|
                //    //socket.OnOpen = () => Conn.Send("服务器已连接!"); | 
						|
                //    socket.OnClose = () => { }; | 
						|
                //    socket.OnMessage = message => | 
						|
                //    { | 
						|
                //        if (string.IsNullOrEmpty(message.Trim()) == false) | 
						|
                //        { | 
						|
                //            //var result = CommandHelper.Exc(message); | 
						|
                //            //socket.Send(message + Environment.NewLine); | 
						|
                //        } | 
						|
                //    }; | 
						|
                //}); | 
						|
            } | 
						|
            catch { } | 
						|
 | 
						|
        } | 
						|
        public void Send(string pMsg) | 
						|
        { | 
						|
            foreach (var item in conns.Keys) | 
						|
            { | 
						|
                if (conns[item] != null) | 
						|
                { | 
						|
                    if (conns[item].IsAvailable) | 
						|
                    { | 
						|
                        conns[item].Send(pMsg); | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        /// <summary> | 
						|
        ///  | 
						|
        /// </summary> | 
						|
        public void Stop() | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                foreach (var item in conns.Keys) | 
						|
                { | 
						|
                    if (conns[item] != null) | 
						|
                    { | 
						|
                        conns[item].Close(); | 
						|
                    } | 
						|
                } | 
						|
                conns.Clear(); | 
						|
                //if (Conn != null) | 
						|
                //    Conn.Close(); | 
						|
                //Conn = null; | 
						|
                if (webSocketServer != null) | 
						|
                { | 
						|
                    webSocketServer.Dispose(); | 
						|
                } | 
						|
            } | 
						|
            catch { } | 
						|
        } | 
						|
    } | 
						|
}
 | 
						|
 |