using System; using System.Collections.Generic; using System.Linq; using System.Text; using Transitionals; using WebSocket4Net; using System.Configuration; using Container.Common; using System.IO; using System.Threading; using System.Windows; using Newtonsoft.Json; using System.Net; using Container.Business; namespace Container.Services { public class WebSocketManage { 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(); private HttpClient httpclient = new HttpClient(); private Class_Config con = new Class_Config(); bool reconnect = false; #region WebSocketClient public void OpenWebSocket() { try { if (string.IsNullOrEmpty(app.LocalIP)) { foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList) { if (_IPAddress.AddressFamily.ToString() == "InterNetwork") { app.LocalIP = _IPAddress.ToString(); } } } string sendmsg = "ip=" + app.LocalIP; websocket = new WebSocket(app.configwebsocket + "?"+ sendmsg);// 地址 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) // websocket.Close(); } void websocket_MessageReceived(object sender, MessageReceivedEventArgs e) { try { log.WriteLogFile(e.Message, "WebSocketLog"); string type = ""; Dictionary dic = Newtonsoft.Json.JsonConvert.DeserializeObject>(e.Message.ToLower()); if (dic["content"] != null && dic["senderid"] != null) { Dictionary Commands = JsonConvert.DeserializeObject>(dic["content"].ToString()); if (!string.IsNullOrEmpty(Commands["type"].ToString())) { type = Commands["type"].ToString(); } if (type.Trim().Equals("apppublish")) { AppListModel model = new AppListModel(); model.AppID = string.IsNullOrEmpty(Commands["appid"].ToString()) ? "" : Commands["appid"].ToString(); model.AppType = string.IsNullOrEmpty(Commands["apptype"].ToString()) ? "" : Commands["apptype"].ToString(); //model.AppUrl = string.IsNullOrEmpty(Commands["appurl"].ToString()) ? "" : Commands["appurl"].ToString(); model.Code = string.IsNullOrEmpty(Commands["code"].ToString()) ? "" : Commands["code"].ToString(); model.Logo = string.IsNullOrEmpty(Commands["logo"].ToString()) ? "" : Commands["logo"].ToString(); model.Name = string.IsNullOrEmpty(Commands["name"].ToString()) ? "" : Commands["name"].ToString(); model.ShelfTime = (Commands["shelftime"] == null || string.IsNullOrEmpty(Commands["shelftime"].ToString())) ? "" : Commands["shelftime"].ToString(); model.Default = string.IsNullOrEmpty(Commands["default"].ToString()) ? "false" : Commands["default"].ToString(); model.File = Commands["file"] == null ? "" : Commands["file"].ToString(); model.PackageName = Commands["packagename"] == null ? "" : Commands["packagename"].ToString(); model.PlatformType = Commands["platformtype"] == null ? "" : Commands["platformtype"].ToString(); model.Startup = Commands["startup"] == null ? "" : Commands["startup"].ToString(); model.Version = Commands["version"] == null ? "" : Commands["version"].ToString(); bool flag = httpclient.DownLoadIcon(ref model.Logo); if (!string.IsNullOrEmpty(model.File)) { httpclient.DownLoadFiles(model.File, ref model.File); } if (!string.IsNullOrEmpty(model.Startup) && (model.Startup.ToLower().StartsWith("https://") || model.Startup.ToLower().StartsWith("http://"))) { model.Startup = log.WriteAppStart(model.Name, model.Startup); } con.WriteToExeConfig(model); app.AppList.Add(model); //log.WriteLogFile("发布应用", "WebSocketLog"); //app.AppUpdate = false; //if (!string.IsNullOrEmpty(Commands["name"].ToString())) //{ // app.appName = Commands["name"].ToString(); // app.Appdowninfo.exename = Commands["name"].ToString(); //} //if (!string.IsNullOrEmpty(Commands["filepath"].ToString())) //{ // app.appUrl = dic["senderid"].ToString().TrimEnd('/') + Commands["filepath"].ToString(); //} //if (!string.IsNullOrEmpty(Commands["appnameen"].ToString())) //{ // app.Appdowninfo.exestartname = Commands["appnameen"].ToString(); //} //if (!string.IsNullOrEmpty(Commands["iconfilepath"].ToString())) //{ // app.icourl = dic["senderid"].ToString().TrimEnd('/') + Commands["iconfilepath"].ToString(); //} //if (!string.IsNullOrEmpty(Commands["appid"].ToString())) //{ // app.Appdowninfo.AppID = Commands["appid"].ToString(); //} //if (!string.IsNullOrEmpty(Commands["version"].ToString())) //{ // app.Appdowninfo.Version = Commands["version"].ToString(); //} } else if (type.Trim().Equals("cloud-screenshot")) { app.screenshotUserName = string.IsNullOrEmpty(Commands["parameter"].ToString()) ? "" : Commands["parameter"].ToString(); } else if (type.Trim().Equals("appdown")) { var code = Commands["code"].ToString(); var defaultCode = Commands["defaultapp"].ToString(); if (!string.IsNullOrEmpty(code)) { var appmodel = app.AppList.Where(i => i.Code == code).FirstOrDefault(); var appList = app.AppList; app.AppList.Remove(appmodel); foreach (var item in app.AppList) { if (item.Code == defaultCode) { item.Default = Boolean.TrueString; } } //con.RemoveExeConfig(appmodel.Code, ref appmodel.File, ref appmodel.Logo, ref appmodel.Startup); //if (!string.IsNullOrEmpty(appmodel.File) && Directory.Exists(appmodel.File)) //{ // Directory.Delete(appmodel.File); //} //if (!string.IsNullOrEmpty(appmodel.Logo) && File.Exists(appmodel.Logo)) //{ // File.Delete(appmodel.Logo); //} //if (!string.IsNullOrEmpty(appmodel.Logo) && File.Exists(appmodel.Startup)) //{ // File.Delete(appmodel.Startup); //} var nowTimeSlot = app.AppTimeList.Where(i => i.AppCode != code && i.AppCode != defaultCode).ToList(); if (nowTimeSlot.Count < app.AppTimeList.Count) { app.AppTimeList = nowTimeSlot; con.WriteToAppTimeConfig(app.AppTimeList); } } //app.AppDownCode = ""; //if (!string.IsNullOrEmpty(Commands["appid"].ToString())) //{ // app.AppDownCode = Commands["appid"].ToString(); //} } else if (type.Trim().Equals("apptimeset")) { HttpMessage httpMessage = new HttpMessage(); httpMessage.LoadAppTimeConfig(); //app.DefaultAppCode = ""; //if (!string.IsNullOrEmpty(Commands["defaultappcode"].ToString())) //{ // app.DefaultAppCode = Commands["defaultappcode"].ToString(); //} } else if (type.Trim().Equals("appupdate")) { AppListModel model = new AppListModel(); model.AppID = string.IsNullOrEmpty(Commands["appid"].ToString()) ? "" : Commands["appid"].ToString(); model.AppType = string.IsNullOrEmpty(Commands["apptype"].ToString()) ? "" : Commands["apptype"].ToString(); //model.AppUrl = string.IsNullOrEmpty(Commands["appurl"].ToString()) ? "" : Commands["appurl"].ToString(); model.Code = string.IsNullOrEmpty(Commands["code"].ToString()) ? "" : Commands["code"].ToString(); model.Logo = string.IsNullOrEmpty(Commands["logo"].ToString()) ? "" : Commands["logo"].ToString(); model.Name = string.IsNullOrEmpty(Commands["name"].ToString()) ? "" : Commands["name"].ToString(); model.ShelfTime = (Commands["shelftime"] == null || string.IsNullOrEmpty(Commands["shelftime"].ToString())) ? "" : Commands["shelftime"].ToString(); model.Default = string.IsNullOrEmpty(Commands["default"].ToString()) ? "false" : Commands["default"].ToString(); model.File = Commands["file"] == null ? "" : Commands["file"].ToString(); model.PackageName = Commands["packagename"] == null ? "" : Commands["packagename"].ToString(); model.PlatformType = Commands["platformtype"] == null ? "" : Commands["platformtype"].ToString(); model.Startup = Commands["startup"] == null ? "" : Commands["startup"].ToString(); model.Version = Commands["version"] == null ? "" : Commands["version"].ToString(); bool flag = httpclient.DownLoadIcon(ref model.Logo); var appModel = app.AppList.Where(i => i.Code == model.Code).FirstOrDefault(); if ((appModel == null || appModel.Version != model.Version) && !string.IsNullOrEmpty(model.File)) { httpclient.DownLoadFiles(model.File, ref model.File); } if (!string.IsNullOrEmpty(model.Startup) && (model.Startup.ToLower().StartsWith("https://") || model.Startup.ToLower().StartsWith("http://"))) { model.Startup = log.WriteAppStart(model.Name, model.Startup); } con.WriteToExeConfig(model); foreach (var item in app.AppList) { if (item.Code == model.Code) { item.AppID = model.AppID; item.AppType = model.AppType; item.Default = model.Default; item.File = model.File; item.Logo = model.Logo; item.Name = model.Name; item.PackageName = model.PackageName; item.PlatformType = model.PlatformType; item.ShelfTime = model.ShelfTime; item.Startup = model.Startup; item.Version = model.Version; } } //app.AppUpdate = true; //if (!string.IsNullOrEmpty(Commands["appname"].ToString())) //{ // app.appName = Commands["appname"].ToString(); // app.Appdowninfo.exename = Commands["appname"].ToString(); //} //if (!string.IsNullOrEmpty(Commands["filepath"].ToString())) //{ // app.appUrl = dic["senderid"].ToString().TrimEnd('/') + Commands["filepath"].ToString(); //} //if (!string.IsNullOrEmpty(Commands["appnameen"].ToString())) //{ // app.Appdowninfo.exestartname = Commands["appnameen"].ToString(); //} //if (!string.IsNullOrEmpty(Commands["iconfilepath"].ToString())) //{ // app.icourl = dic["senderid"].ToString().TrimEnd('/') + Commands["iconfilepath"].ToString(); //} //if (!string.IsNullOrEmpty(Commands["appid"].ToString())) //{ // app.Appdowninfo.AppID = Commands["appid"].ToString(); //} } else if (type.Trim().Equals("appclock")) { //if (!string.IsNullOrEmpty(Commands["data"].ToString())) //{ // Dictionary data = JsonConvert.DeserializeObject>(Commands["data"].ToString()); // if (!string.IsNullOrEmpty(data["startapp"].ToString())) // { // Dictionary startapp = JsonConvert.DeserializeObject>(data["startapp"].ToString()); // if (!string.IsNullOrEmpty(startapp["filename"].ToString())) // { // app.AppPlayDir = startapp["filename"].ToString(); // app.AppStartinfo.exepath = startapp["appnameen"].ToString(); // if (!string.IsNullOrEmpty(startapp["appnameen"].ToString())) // { // //app.AppPlayName = startapp["appnameen"].ToString(); // app.AppStartinfo.exestartname = startapp["appnameen"].ToString(); // } // if (!string.IsNullOrEmpty(startapp["appid"].ToString())) // { // app.AppStartinfo.AppID = startapp["appid"].ToString(); // } // if (!string.IsNullOrEmpty(startapp["appname"].ToString())) // { // app.AppStartinfo.exename = startapp["appname"].ToString(); // } // } // else // { // if (!string.IsNullOrEmpty(data["endapp"].ToString())) // { // Dictionary endapp = JsonConvert.DeserializeObject>(data["endapp"].ToString()); // if (!string.IsNullOrEmpty(endapp["name"].ToString())) // { // app.AppStartinfo.exename = ""; // } // } // } // } //} } else if (type.Trim().Equals("insertad")) { //if (!string.IsNullOrEmpty(Commands["data"].ToString())) //{ // Dictionary data = JsonConvert.DeserializeObject>(Commands["data"].ToString()); // if (!string.IsNullOrEmpty(data["filepath"].ToString())) // { // //Dictionary admodel = JsonConvert.DeserializeObject>(data["admodel"].ToString()); // //if (!string.IsNullOrEmpty(data["filepath"].ToString())) // //{ // app.insertAD.Duration = Convert.ToInt32(data["duration"]); // app.insertAD.FilePath = data["filepath"].ToString(); // //} // } //} } else if (type.Trim().Equals("addown")) { //app.insertAD.Duration = 0; //app.insertAD.FilePath = ""; } else if (type.Trim().Equals("devnumedit")) { if (!string.IsNullOrEmpty(Commands["devnum"].ToString())) { Dictionary dicNum = Newtonsoft.Json.JsonConvert.DeserializeObject>(e.Message); Dictionary CommandsNum = JsonConvert.DeserializeObject>(dicNum["Content"].ToString()); app.devicemark = CommandsNum["DevNum"].ToString(); //app.devicemark = Commands["devnum"].ToString(); } } else if (type.Trim().Equals("bgset")) { if (!string.IsNullOrEmpty(Commands["filepath"].ToString())) { app.bgPath = Commands["filepath"].ToString(); } } else if (type.Trim().Equals("screensaver")) { app.screensaver.ScreenTime = 30; if (!string.IsNullOrEmpty(Commands["time"].ToString())) { app.screensaver.ScreenTime = Convert.ToInt32(Commands["time"]); } string fileName = string.Empty; if (!string.IsNullOrEmpty(Commands["screenfilepath"].ToString())) { string path = Commands["screenfilepath"].ToString(); if (!string.IsNullOrEmpty(path)) { httpclient.DownLoadImage(path, "exefile/PCScreen/config", ref fileName); } } Class_Config config = new Class_Config(); string screentype = "0"; if (!string.IsNullOrEmpty(Commands["screentype"].ToString())) { screentype = Commands["screentype"].ToString(); } string screeneffect = "0"; if (!string.IsNullOrEmpty(Commands["screeneffect"].ToString())) { screeneffect = Commands["screeneffect"].ToString(); } string effecttype = "0"; if (!string.IsNullOrEmpty(Commands["effecttype"].ToString())) { effecttype = Commands["effecttype"].ToString(); } config.WriteToScreenConfig(screentype, screeneffect, fileName, effecttype); } else if (type.Trim().Equals("updateprog")) { PlayBackManage pbm = new PlayBackManage(); pbm.DownResource(); } } if (WebSocketReceiveEvent != null) { WebSocketReceiveEvent(type, ""); } } 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 } }