using StartServerWPF.Modules.Main.Models; using SuperSocket.ClientEngine; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Security.Principal; using System.Text; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using WebSocket4Net; namespace StartServerWPF.Modules.Main { public class WebsocketClient { public WebSocket webSocket4Net = null; public Action WebsocketError; public Action WebSocketMessageReceived; public void WebSocketInit(string url) { webSocket4Net = new WebSocket(url); webSocket4Net.Opened += WebSocket4Net_Opened; webSocket4Net.Error += new EventHandler(WebSocket_Error); webSocket4Net.MessageReceived += WebSocket4Net_MessageReceived; Debug.WriteLine("客户端连接成功!"); } private string name = string.Empty; private string pwd = string.Empty; public void SiginServer(string account,string password) { isHeartbeat = false; name = account; pwd = password; webSocket4Net.Open(); Task.Run(async () =>{ await Task.Delay(2000); isHeartbeat = true; SendHeartbeat(); }); } public void Closed() { isHeartbeat = false; } public void SendMes(string message) { webSocket4Net.Send(message); } bool isHeartbeat = false; private void SendHeartbeat() { while (isHeartbeat) { try { if (webSocket4Net.State == WebSocketState.Open) { webSocket4Net.Send("{\"type\":\"heartbeat\",\"utype\":\"device\"}"); } else if (webSocket4Net.State == WebSocketState.Closed) { webSocket4Net.Open(); } } catch (Exception ex) { Debug.WriteLine("连接报错:"+ ex.ToString()); Thread.Sleep(TimeSpan.FromSeconds(10)); } Thread.Sleep(TimeSpan.FromSeconds(5)); } } private void WebSocket4Net_MessageReceived(object sender, MessageReceivedEventArgs e) { WebSocketMessageReceived?.Invoke(e.Message); } private void WebSocket4Net_Opened(object sender, EventArgs e) { Debug.WriteLine("连接websocket成功,自动登录****************"); string jsonstr = JsonSerializer.Serialize(new CSUserSigin { type = CSMessage.sigin, utype = "device", account = name, password = pwd }); SendMes(jsonstr); } void WebSocket_Error(object sender, ErrorEventArgs e) { WebsocketError?.Invoke(e); Debug.WriteLine("websocket_Error:" + e.Exception.ToString()); } } }