using System; using System.Configuration; using System.Threading; using WebSocket4Net; namespace Container.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, "rich"); websocket = new WebSocket(ws); websocket.Error += new EventHandler(websocket_Error); websocket.MessageReceived += new EventHandler(websocket_MessageReceived); websocket.Open(); //websocket.Opened += new EventHandler(websocket_Opened); websocket.Closed += new EventHandler(websocket_Closed); } catch (Exception ex) { log.WriteLogFile(ex.ToString()); } } void websocket_Closed(object sender, EventArgs e) { if (!reconnect) { reconnect = true; ReConnect(); } } public void CloseWebSocket() { if (websocket != null) { reconnect = true; websocket.Close(); } } void websocket_MessageReceived(object sender, MessageReceivedEventArgs e) { log.WriteLogFile("进来了", "rich"); try { WebSocketReceiveEvent("richad", ""); } catch (Exception ex) { log.WriteLogFile(ex.ToString(), "WebSocketLog"); } } void websocket_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e) { log.WriteLogFile(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 (websocket.State == WebSocketState.Closed) { Thread.Sleep(30000); if (websocket.State == WebSocketState.Closed) websocket.Open(); } if (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(ex.ToString(), "WebSocketErrorLog"); } } #endregion } }