using Fleck; using Newtonsoft.Json; using PCScreenSavers.ViewModel; using System; using System.Collections.Generic; using System.Configuration; using System.Net; using System.Threading; using System.Web; using WebSocket4Net; namespace PCScreenSavers.Common { public class WebSocketForFaceManage { // private WebSocket websocket = null; App app = ((App)System.Windows.Application.Current); public delegate void WebSocketReceiveDelegate(string type, string message); public static event WebSocketReceiveDelegate WebSocketReceiveEvent; private Class_Log log = new Class_Log(); bool reconnect = false; #region WebSocketClient public void OpenWebSocket() { try { var ws = ConfigurationManager.AppSettings["websocketForFace"]; log.WriteLogFile(ws,"face"); app.websocket = new WebSocket(ws); app.websocket.Error += new EventHandler(websocket_Error); app.websocket.MessageReceived += new EventHandler(websocket_MessageReceived); app.websocket.Opened += new EventHandler(websocket_Opened); app.websocket.Closed += new EventHandler(websocket_Closed); app.websocket.Open(); } catch (Exception ex) { log.WriteLogFile(ex.ToString()); } } void websocket_Opened(object sender, EventArgs e) { log.WriteLogFile("连接成功", "444"); //app.websocket.Send("首页"); } void websocket_Closed(object sender, EventArgs e) { //if (!reconnect) //{ // reconnect = true; // ReConnect(); //} } public void CloseWebSocket() { //if (websocket != null) // websocket.Close(); } void websocket_MessageReceived(object sender, MessageReceivedEventArgs e) { try { if (e.Message.ToLower().IndexOf("type") >= 0) { WebSocketReceiveEvent("richad", ""); } else if (e.Message.ToLower().IndexOf("ok") >= 0) { app.websocket.Send("首页"); } } catch (Exception ex) { log.WriteLogFile(ex.ToString(), "WebSocketLog"); } } void websocket_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e) { log.WriteLogFile("22"+e.Exception.Message + e.Exception.StackTrace, "WebSocketErrorLog"); //try //{ // if (websocket != null) // websocket.Close(); //} //catch //{ //} //ReConnect(); } /// /// websocket重连 /// private void ReConnect() { try { Action ac = new Action(() => { while (true) { try { if (app.websocket.State == WebSocketState.Closed) { Thread.Sleep(30000); if (app.websocket.State == WebSocketState.Closed) app.websocket.Open(); } if (app.websocket.State == WebSocketState.Open) { //reconnect = false; break; } } catch (Exception ex) { log.WriteLogFile(ex.ToString(), "WebSocketErrorLog"); } finally { Thread.Sleep(3000); } } }); ac.BeginInvoke((o) => { reconnect = false; }, null); } catch (Exception ex) { log.WriteLogFile("11" + ex.ToString(), "WebSocketErrorLog"); } } #endregion } }