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.

478 lines
24 KiB

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<SuperSocket.ClientEngine.ErrorEventArgs>(websocket_Error);
websocket.MessageReceived += new EventHandler<MessageReceivedEventArgs>(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<string, Object> dic = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, Object>>(e.Message.ToLower());
if (dic["content"] != null && dic["senderid"] != null)
{
Dictionary<string, Object> Commands = JsonConvert.DeserializeObject<Dictionary<string, Object>>(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<string, Object> data = JsonConvert.DeserializeObject<Dictionary<string, Object>>(Commands["data"].ToString());
// if (!string.IsNullOrEmpty(data["startapp"].ToString()))
// {
// Dictionary<string, string> startapp = JsonConvert.DeserializeObject<Dictionary<string, string>>(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<string, string> endapp = JsonConvert.DeserializeObject<Dictionary<string, string>>(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<string, Object> data = JsonConvert.DeserializeObject<Dictionary<string, Object>>(Commands["data"].ToString());
// if (!string.IsNullOrEmpty(data["filepath"].ToString()))
// {
// //Dictionary<string, string> admodel = JsonConvert.DeserializeObject<Dictionary<string, string>>(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<string, Object> dicNum = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, Object>>(e.Message);
Dictionary<string, Object> CommandsNum = JsonConvert.DeserializeObject<Dictionary<string, Object>>(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();
}
/// <summary>
/// websocket重连
/// </summary>
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
}
}