forked from yanw/App_win_iot_V2.0
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.
2470 lines
114 KiB
2470 lines
114 KiB
using IOTContainer.Communication;
|
|
using IOTContainer.Model;
|
|
using IOTContainer.View;
|
|
using IOTContainer.ViewModel;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Configuration;
|
|
using System.IO;
|
|
using System.IO.Compression;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Security;
|
|
using System.Runtime.InteropServices;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Markup;
|
|
|
|
namespace IOTContainer.Common
|
|
{
|
|
public class HttpComm
|
|
{
|
|
public static HttpComm Http
|
|
{
|
|
get
|
|
{
|
|
if (_http == null)
|
|
_http = new HttpComm();
|
|
return _http;
|
|
}
|
|
}
|
|
public delegate void ScreenConfigDelegate();
|
|
public event ScreenConfigDelegate ScreenConfigReceiveEvent;
|
|
private static HttpComm _http;
|
|
public string _httpUrl;
|
|
private HttpComm()
|
|
{
|
|
_httpUrl = string.IsNullOrEmpty(ComParameters.Parameters.httpPort) ? ComParameters.Parameters.httpServer : ComParameters.Parameters.httpServer +":"+ ComParameters.Parameters.httpPort;
|
|
//_httpUrl = ComParameters.Parameters.httpServer + ComParameters.Parameters.httpPort;
|
|
}
|
|
|
|
public string Get(string Url, string cookies = null)
|
|
{
|
|
try
|
|
{
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
|
|
request.Method = "GET";
|
|
if (cookies != null)
|
|
request.Headers.Add("Cookie", cookies);
|
|
request.ContentType = "application/x-www-form-urlencoded";
|
|
ServicePointManager.Expect100Continue = true;
|
|
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
|
|
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
|
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
|
string encoding = response.ContentEncoding;
|
|
if (encoding == null || encoding.Length < 1)
|
|
{
|
|
encoding = "UTF-8"; //默认编码
|
|
}
|
|
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
|
|
string retString = reader.ReadToEnd();
|
|
return retString;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile($"地址为:{Url}{ex.ToString()}");
|
|
return "Error";
|
|
}
|
|
}
|
|
private void init_Request(ref HttpWebRequest request)
|
|
{
|
|
request.Accept = "text/json,*/*;q=0.5";
|
|
request.Headers.Add("Accept-Charset", "utf-8;q=0.7,*;q=0.7");
|
|
request.Headers.Add("Accept-Encoding", "gzip, deflate, x-gzip, identity; q=0.9");
|
|
request.AutomaticDecompression = DecompressionMethods.GZip;
|
|
request.Timeout = 60000;
|
|
}
|
|
|
|
public string Post(string url, string data, string contentType = "application/x-www-form-urlencoded; charset=utf-8", Dictionary<string, string> headers = null)
|
|
{
|
|
try
|
|
{
|
|
var request = (HttpWebRequest)WebRequest.Create(url);
|
|
{
|
|
string retval;
|
|
init_Request(ref request);
|
|
request.Method = "POST";
|
|
request.ContentType = contentType;
|
|
if (headers != null && headers.Count > 0)
|
|
{
|
|
foreach (var h in headers)
|
|
{
|
|
request.Headers.Add(h.Key, h.Value);
|
|
}
|
|
}
|
|
ServicePointManager.Expect100Continue = true;
|
|
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
|
|
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
|
|
var bytes = System.Text.Encoding.UTF8.GetBytes(data);
|
|
request.ContentLength = bytes.Length;
|
|
using (var stream = request.GetRequestStream())
|
|
{
|
|
stream.Write(bytes, 0, bytes.Length);
|
|
}
|
|
using (var response = request.GetResponse())
|
|
{
|
|
using (var reader = new System.IO.StreamReader(response.GetResponseStream() ?? throw new InvalidOperationException()))
|
|
{
|
|
retval = reader.ReadToEnd();
|
|
}
|
|
}
|
|
return retval;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile(ex.ToString());
|
|
return "Error";
|
|
}
|
|
}
|
|
public string Request(string Method, string url, Dictionary<string, object> dic = null, string ContentType = null, string data = null, JObject json = null, string headers = null, string cookies = null, string UserAgent = null, int Timeout = 30000, string Referer = null, string Proxy = null, bool KeepAlive = true)
|
|
{
|
|
try
|
|
{
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
|
request.Method = Method;
|
|
request.Referer = Referer ?? null;
|
|
request.KeepAlive = KeepAlive;
|
|
request.Timeout = Timeout;
|
|
request.ServerCertificateValidationCallback = delegate { return true; };
|
|
request.Headers.Add("cookie", cookies);
|
|
request.UserAgent = UserAgent ?? "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36";
|
|
request.ServicePoint.Expect100Continue = false;
|
|
if (Proxy != null)
|
|
{
|
|
WebProxy WebProxy = new WebProxy(Proxy);
|
|
request.Proxy = WebProxy;
|
|
}
|
|
|
|
if (Method != "GET")
|
|
{
|
|
byte[] bytePost = { };
|
|
if (data != null)
|
|
{
|
|
request.ContentType = "application/json;charset=utf-8";
|
|
bytePost = Encoding.UTF8.GetBytes(data.ToString());
|
|
}
|
|
if (json != null)
|
|
{
|
|
request.ContentType = "application/json;charset=utf-8";
|
|
bytePost = Encoding.UTF8.GetBytes(json.ToString());
|
|
}
|
|
if (dic != null)
|
|
{
|
|
request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
|
|
string param = "";
|
|
for (int count = 0; count < dic.Count; count++)
|
|
param += dic.ElementAt(count).Key + "=" + dic.ElementAt(count).Value.ToString() + "&";
|
|
bytePost = Encoding.UTF8.GetBytes(param.ToString());
|
|
}
|
|
|
|
request.ContentLength = bytePost.Length;
|
|
request.GetRequestStream().Write(bytePost, 0, bytePost.Length);
|
|
request.GetRequestStream().Close();
|
|
}
|
|
|
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
|
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
|
|
string r = myStreamReader.ReadToEnd();
|
|
myStreamReader.Close();
|
|
return r;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("Request:" + ex.ToString());
|
|
return null;
|
|
}
|
|
}
|
|
private bool RemoteCertificateValidate(
|
|
object sender, X509Certificate cert,
|
|
X509Chain chain, SslPolicyErrors error)
|
|
{
|
|
return true;
|
|
}
|
|
/// <summary>
|
|
/// 下载文件
|
|
/// </summary>
|
|
/// <param name="fileUrl">下载地址</param>
|
|
/// <param name="localFileName">本地文件名</param>
|
|
/// <param name="folderPath">文件夹完整路径</param>
|
|
/// <param name="cover">是否覆盖同名文件</param>
|
|
/// <returns></returns>
|
|
private string DownLoadFile(string fileUrl, string localFileName, string folderPath, bool cover = false)
|
|
{
|
|
var filePath = "";
|
|
try
|
|
{
|
|
if (!Directory.Exists(folderPath))
|
|
{
|
|
Directory.CreateDirectory(folderPath);
|
|
}
|
|
if (File.Exists(folderPath + "/" + localFileName))
|
|
{
|
|
if (!cover)
|
|
{
|
|
return filePath;
|
|
}
|
|
else
|
|
{
|
|
File.Delete(folderPath + "/" + localFileName);
|
|
}
|
|
}
|
|
if (File.Exists(folderPath + "/" + localFileName + ".temp"))
|
|
{
|
|
File.Delete(folderPath + "/" + localFileName + ".temp");
|
|
}
|
|
using (Stream fileStream = new FileStream(folderPath + "/" + localFileName + ".temp", FileMode.OpenOrCreate))
|
|
{
|
|
try
|
|
{
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileUrl);
|
|
request.AddRange(fileStream.Length);
|
|
ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate;
|
|
HttpWebResponse respone = (HttpWebResponse)request.GetResponse();
|
|
using (Stream netStream = respone.GetResponseStream())
|
|
{
|
|
long totalDownloadedByte = 0;
|
|
byte[] read = new byte[1024];
|
|
int realReadLen = netStream.Read(read, 0, read.Length);
|
|
while (realReadLen > 0)
|
|
{
|
|
totalDownloadedByte = realReadLen + totalDownloadedByte;
|
|
|
|
fileStream.Write(read, 0, realReadLen);
|
|
realReadLen = netStream.Read(read, 0, read.Length);
|
|
|
|
System.Windows.Forms.Application.DoEvents();
|
|
}
|
|
netStream.Close();
|
|
}
|
|
if (fileStream.Length != respone.ContentLength)
|
|
{
|
|
Log.MyLog.WriteLogFile("文件未下载完毕");
|
|
}
|
|
fileStream.Close();
|
|
Log.MyLog.WriteLogFile("下载完成" + folderPath + "/" + localFileName, "FileDownload");
|
|
File.Move(folderPath + "/" + localFileName + ".temp", folderPath + "/" + localFileName);
|
|
filePath = folderPath + "/" + localFileName;
|
|
|
|
|
|
//var fileHash = GetMD5HashFromFile(folderPath + "/" + localFileName);
|
|
//if (fileHash != hash)
|
|
//{
|
|
// log.WriteLogFile("localFile " + fileHash + " getHash:" + hash, "exelog");
|
|
// File.Delete(folderPath + "/" + localFileName);
|
|
// log.WriteLogFile("FileHash对比不一致,须删除重新下载" + folderPath + "/" + localFileName, "exelog");
|
|
// return false;
|
|
//}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
fileStream.Close();
|
|
Log.MyLog.WriteLogFile($"下载失败:源地址{fileUrl},本地地址:" + folderPath + "/" + localFileName + ex.ToString());
|
|
File.Delete(folderPath + "/" + localFileName + ".temp");
|
|
return "";
|
|
}
|
|
}
|
|
return filePath;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Log.MyLog.WriteLogFile("下载失败:源地址:" + fileUrl + e.ToString());
|
|
return "";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 表单上传
|
|
/// </summary>
|
|
/// <param name="url"></param>
|
|
/// <param name="path"></param>
|
|
/// <returns></returns>
|
|
public string UploadFile(string url, string filePath, Dictionary<string, string> formDatas, string contentType = "multipart/form-data;")
|
|
{
|
|
var returnValue = "";
|
|
// 时间戳,用做boundary
|
|
string timeStamp = DateTime.Now.Ticks.ToString("x");
|
|
|
|
//根据uri创建HttpWebRequest对象
|
|
HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(url));
|
|
httpReq.Method = "POST";
|
|
httpReq.AllowWriteStreamBuffering = false; //对发送的数据不使用缓存
|
|
httpReq.Timeout = 300000; //设置获得响应的超时时间(300秒)
|
|
httpReq.ContentType = "multipart/form-data; boundary=" + timeStamp;
|
|
|
|
//读取file文件
|
|
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
|
|
BinaryReader binaryReader = new BinaryReader(fileStream);
|
|
try
|
|
{
|
|
//表单信息
|
|
string boundary = "--" + timeStamp;
|
|
string form = "";
|
|
string formFormat = boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}\r\n";
|
|
string formEnd = boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\";\r\nContent-Type:application/octet-stream\r\n\r\n";
|
|
foreach (var pair in formDatas)
|
|
{
|
|
form += string.Format(formFormat, pair.Key, pair.Value);
|
|
}
|
|
form += string.Format(formEnd, "file", Path.GetFileName(filePath));
|
|
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(form);
|
|
|
|
//结束边界
|
|
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + timeStamp + "--\r\n");
|
|
long length = fileStream.Length + postHeaderBytes.Length + boundaryBytes.Length;
|
|
httpReq.ContentLength = length; //请求内容长度
|
|
|
|
//每次上传4k
|
|
int bufferLength = 4096;
|
|
byte[] buffer = new byte[bufferLength];
|
|
|
|
//已上传的字节数
|
|
long offset = 0;
|
|
int size = binaryReader.Read(buffer, 0, bufferLength);
|
|
Stream postStream = httpReq.GetRequestStream();
|
|
|
|
//发送请求头部消息
|
|
postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
|
|
|
|
while (size > 0)
|
|
{
|
|
postStream.Write(buffer, 0, size);
|
|
offset += size;
|
|
size = binaryReader.Read(buffer, 0, bufferLength);
|
|
}
|
|
|
|
//添加尾部边界
|
|
postStream.Write(boundaryBytes, 0, boundaryBytes.Length);
|
|
postStream.Close();
|
|
|
|
//获取服务器端的响应
|
|
using (HttpWebResponse response = (HttpWebResponse)httpReq.GetResponse())
|
|
{
|
|
ServicePointManager.Expect100Continue = true;
|
|
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
|
|
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
|
|
Stream receiveStream = response.GetResponseStream();
|
|
StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
|
|
returnValue = readStream.ReadToEnd();
|
|
response.Close();
|
|
readStream.Close();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("文件传输异常: " + ex.ToString());
|
|
}
|
|
finally
|
|
{
|
|
fileStream.Close();
|
|
binaryReader.Close();
|
|
}
|
|
return returnValue;
|
|
}
|
|
/// <summary>
|
|
/// 测试MQTT连接是否可用
|
|
/// </summary>
|
|
public void IsMqttConnect()
|
|
{
|
|
var result = "";
|
|
try
|
|
{
|
|
string api = "/api/mqtt/v1/client/ping";
|
|
string httpUri = _httpUrl + api + "?machineCode=" + ComParameters.Parameters.devCode;
|
|
result = Get(httpUri);
|
|
Log.MyLog.WriteLogFile("httpUri:" + httpUri + Environment.NewLine + "result:" + result, "MQTT连接测试");
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("MQTT连接不可用:" + jo.Value<string>("msg"), "MQTT连接测试");
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("MQTT连接可用:" + jo.Value<string>("msg"), "MQTT连接测试");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("测试MQTT连接:" + result, "MQTT连接测试");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("测试MQTT连接异常:" + ex, "MQTT连接测试");
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 测试连接
|
|
/// </summary>
|
|
/// <param name="url"></param>
|
|
/// <param name="timeout"></param>
|
|
/// <returns></returns>
|
|
public static bool IsCanConnect(string url, int timeout = 3000)
|
|
{
|
|
HttpWebResponse res = null;
|
|
bool CanCn = true;
|
|
try
|
|
{
|
|
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
|
|
req.Method = "HEAD";
|
|
req.Timeout = timeout;
|
|
res = (HttpWebResponse)req.GetResponse();
|
|
CanCn = res.StatusCode.ToString() == "OK";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
CanCn = false; //无法连接
|
|
}
|
|
finally
|
|
{
|
|
if (res != null)
|
|
{
|
|
res.Close();
|
|
}
|
|
}
|
|
return CanCn;
|
|
}
|
|
|
|
|
|
#region 接口
|
|
/// <summary>
|
|
/// 获得待注册设备信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string Register()
|
|
{
|
|
var result = "";
|
|
try
|
|
{
|
|
string api = "/api/device/v1/client/register" +
|
|
"";
|
|
string httpUri = _httpUrl + api + "?code=" + ComParameters.Parameters.registerCode;
|
|
result = Get(httpUri);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获得待注册设备信息异常:" + ex);
|
|
}
|
|
return result;
|
|
}
|
|
/// <summary>
|
|
/// 设备激活
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public void Activate(out string msg)
|
|
{
|
|
msg = "";
|
|
try
|
|
{
|
|
var label = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "windows" : "android";
|
|
var width = (int)SystemParameters.PrimaryScreenWidth;
|
|
var height = (int)SystemParameters.PrimaryScreenHeight;
|
|
var screenType = width > height ? "横" : "竖";
|
|
var resolution = $"{width}*{height}{screenType}屏";
|
|
var ip = SystemManage.GetLocalIp();
|
|
var mac = SystemManage.GetMac();
|
|
var dic = new Dictionary<string, string>();
|
|
dic.Add("label", label);
|
|
dic.Add("resolution", resolution);
|
|
dic.Add("ip", ip);
|
|
dic.Add("mac", mac);
|
|
dic.Add("code", ComParameters.Parameters.devCode);
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.label, label);
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.resolution, resolution);
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.ip, ip);
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.mac, mac);
|
|
ComParameters.Parameters.label = label;
|
|
ComParameters.Parameters.resolution = resolution;
|
|
ComParameters.Parameters.ip = ip;
|
|
ComParameters.Parameters.mac = mac;
|
|
var api = "/api/device/v1/client/active";
|
|
var httpUri = $"{_httpUrl}{api}";
|
|
var body = JsonConvert.SerializeObject(dic);
|
|
var contentType = "application/json; charset=utf-8";
|
|
var result = Post(httpUri, body, contentType);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code == "200")
|
|
{
|
|
var content = jo.Value<JObject>("data");
|
|
var mqtt = content.ToObject<MQTTModel>();
|
|
if (mqtt != null)
|
|
{
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.mqttServer, mqtt.Server);
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.mqttPort, mqtt.Port);
|
|
ComParameters.Parameters.mqttPort = Convert.ToInt32(mqtt.Port);
|
|
ComParameters.Parameters.mqttServer = mqtt.Server;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
msg = jo.Value<string>("msg");
|
|
Log.MyLog.WriteLogFile("激活设备失败:" + msg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("激活设备失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("设备激活异常:" + ex);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 设备信息
|
|
/// </summary>
|
|
public void DeviceInfo()
|
|
{
|
|
try
|
|
{
|
|
var dic = new Dictionary<string, string>();
|
|
dic.Add("devName", ComParameters.Parameters.devName);
|
|
dic.Add("width", SystemParameters.PrimaryScreenWidth.ToString());
|
|
dic.Add("height", SystemParameters.PrimaryScreenHeight.ToString());
|
|
dic.Add("ip", SystemManage.GetLocalIp());
|
|
dic.Add("mac", SystemManage.GetMac());
|
|
dic.Add("code", ComParameters.Parameters.devCode);
|
|
dic.Add("serverIP", ComParameters.Parameters.httpServer);
|
|
dic.Add("appVersion", ComParameters.Parameters.containerVersion);
|
|
dic.Add("programVersion", ComParameters.Parameters.webVersion);
|
|
Log.MyLog.WriteLogFile(JsonConvert.SerializeObject(dic), "DeviceInfo");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
Log.MyLog.WriteLogFile("设备信息异常:" + ex.ToString(), "DeviceInfo");
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 上传版本号
|
|
/// </summary>
|
|
public void UploadVersion()
|
|
{
|
|
try
|
|
{
|
|
var width = (int)SystemParameters.PrimaryScreenWidth;
|
|
var height = (int)SystemParameters.PrimaryScreenHeight;
|
|
var screenType = width > height ? "横" : "竖";
|
|
var resolution = $"{width}*{height}{screenType}屏";
|
|
var ip = SystemManage.GetLocalIp();
|
|
var dic = new Dictionary<string, string>();
|
|
dic.Add("code", ComParameters.Parameters.devCode);
|
|
dic.Add("appVersion", ComParameters.Parameters.containerVersion);
|
|
dic.Add("programVersion", ComParameters.Parameters.webVersion);
|
|
dic.Add("ip", ip);
|
|
dic.Add("resolution", resolution);
|
|
var api = "/api/device/v1/client/version";
|
|
var httpUri = $"{_httpUrl}{api}";
|
|
var body = JsonConvert.SerializeObject(dic);
|
|
var contentType = "application/json; charset=utf-8";
|
|
var result = Post(httpUri, body, contentType);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
string msg = jo.Value<string>("msg");
|
|
if (code == "200")
|
|
{
|
|
//Log.MyLog.WriteLogFile("版本号上传成功:" + msg);
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("版本号上传失败:" + msg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("版本号上传失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("版本号上传异常:" + ex.ToString());
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取屏保
|
|
/// </summary>
|
|
public void GetProtectation()
|
|
{
|
|
try
|
|
{
|
|
string api = "/api/device/v1/client/getProtection";
|
|
string httpUri = $"{_httpUrl}{api}?projectCode={ComParameters.Parameters.projectCode}&code={ComParameters.Parameters.devCode}";
|
|
var result = Get(httpUri);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("获取屏保失败:" + jo.Value<string>("msg"));
|
|
}
|
|
else
|
|
{
|
|
var data = jo.Value<JObject>("data");
|
|
var model = data.ToObject<ProtectionModel>();
|
|
if (model != null)
|
|
{
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.noTouchingSeconds, model.protectionTime);
|
|
ComParameters.Parameters.noTouchingSeconds = Convert.ToInt32(model.protectionTime);
|
|
if (string.IsNullOrEmpty(model.jumpTime))
|
|
model.jumpTime = "0";
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.jumpTime, model.jumpTime);
|
|
ComParameters.Parameters.jumpTime = Convert.ToInt32(model.jumpTime);
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.labelType, model.type.ToString());
|
|
ComParameters.Parameters.labelType = model.type.ToString();
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.labelEffect, model.protectionEffect);
|
|
ComParameters.Parameters.labelEffect = model.protectionEffect;
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.labelLocation, model.protectionLocation);
|
|
ComParameters.Parameters.labelLocation = model.protectionLocation;
|
|
if (!string.IsNullOrEmpty(model.url))
|
|
{
|
|
var fileName = Guid.NewGuid().ToString() + model.url.Substring(model.url.LastIndexOf("."));
|
|
var filePath = DownLoadFile(ComParameters.Parameters.downloadUrl + model.url, fileName, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ScreenSaver"), true);
|
|
var fileHash = FileManage.GetMD5HashFromFile(filePath);
|
|
if (fileHash == ComParameters.Parameters.screenSaverHash)//相同删除临时文件
|
|
{
|
|
File.Delete(filePath);
|
|
}
|
|
else//不同则删除前文件
|
|
{
|
|
if (!string.IsNullOrEmpty(ComParameters.Parameters.screenSaver))
|
|
{
|
|
File.Delete(ComParameters.Parameters.screenSaver);
|
|
}
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.screenSaver, filePath);
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.screenSaverHash, fileHash);
|
|
ComParameters.Parameters.screenSaver = filePath;
|
|
//if (ComParameters.Parameters.ScreenViewModel != null)
|
|
//{
|
|
// ComParameters.Parameters.ScreenViewModel.ScreenSaverPath = filePath;
|
|
//}
|
|
ComParameters.Parameters.screenSaverHash = fileHash;
|
|
}
|
|
}
|
|
if (!string.IsNullOrEmpty(model.customUrl))
|
|
{
|
|
var fileName = Guid.NewGuid().ToString() + model.customUrl.Substring(model.customUrl.LastIndexOf("."));
|
|
var filePath = DownLoadFile(ComParameters.Parameters.downloadUrl + model.customUrl, fileName, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ScreenSaver"), true);
|
|
var fileHash = FileManage.GetMD5HashFromFile(filePath);
|
|
if (fileHash == ComParameters.Parameters.screenSaverTouchHash)//相同删除临时文件
|
|
{
|
|
File.Delete(filePath);
|
|
}
|
|
else//不同则删除前文件
|
|
{
|
|
if (!string.IsNullOrEmpty(ComParameters.Parameters.screenSaverTouch))
|
|
{
|
|
File.Delete(ComParameters.Parameters.screenSaverTouch);
|
|
}
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.screenSaverTouch, filePath);
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.screenSaverTouchHash, fileHash);
|
|
ComParameters.Parameters.screenSaverTouch = filePath;
|
|
//if (ComParameters.Parameters.ScreenViewModel != null)
|
|
//{
|
|
// ComParameters.Parameters.ScreenViewModel.ScreenSaverPath = filePath;
|
|
//}
|
|
ComParameters.Parameters.screenSaverTouchHash = fileHash;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取屏保失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获取屏保异常:" + ex);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 同步服务器时间
|
|
/// </summary>
|
|
public void getCurrentTimestamp()
|
|
{
|
|
try
|
|
{
|
|
string api = "/api/data/v1/util/getCurrentTimestamp";
|
|
string httpUri = $"{_httpUrl}{api}";
|
|
var result = Get(httpUri);
|
|
Log.MyLog.WriteLogFile("同步服务器时间:" + result, "getCurrentTimestamp");
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("同步服务器时间失败:" + jo.Value<string>("msg"));
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
var data = jo.Value<long>("data");
|
|
Log.MyLog.WriteLogFile("同步服务器时间:" + ConvertExtension.GetDateTime(data), "getCurrentTimestamp");
|
|
SyncServerTime.SystemHelper.SetLocalMachineTime(ConvertExtension.GetDateTime(data));
|
|
}
|
|
catch (Exception tx)
|
|
{
|
|
|
|
Log.MyLog.WriteLogFile("同步服务器时间异常:" + tx);
|
|
}
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取服务器时间失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("同步服务器时间异常:" + ex);
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 获取APP和应用的更新包
|
|
/// </summary>
|
|
public void GetAppPackage()
|
|
{
|
|
try
|
|
{
|
|
string api = "/api/device/v1/deviceWeb/getMachineAppProgramMsg";
|
|
string httpUri = $"{_httpUrl}{api}?code={ComParameters.Parameters.devCode}";
|
|
var result = Get(httpUri);
|
|
Log.MyLog.WriteLogFile("GetAppPackage:" + result, "HttpComm");
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code == "200")
|
|
{
|
|
var data = jo.Value<JObject>("data");
|
|
var model = data.ToObject<GetAppPackageModel>();
|
|
if (model != null)
|
|
{
|
|
var programVersion = model.programVersion;
|
|
var programPackageUrl = model.programPackageUrl;
|
|
var appVersion = model.appVersion;
|
|
var appPackageUrl = model.appPackageUrl;
|
|
if (!string.IsNullOrEmpty(programPackageUrl) && !programVersion.Equals(ComParameters.Parameters.webVersion))
|
|
{
|
|
|
|
var name = $"{DateTime.Now.ToString("yyyy-MM-dd")}_h5_{programVersion}.zip";
|
|
var folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UpgradeFile");
|
|
var filePath = DownLoadFile(programPackageUrl, name, folder, true);
|
|
if (!string.IsNullOrEmpty(filePath))
|
|
{
|
|
var tempDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UpdateTempH5");
|
|
var destDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "www");
|
|
if (!Directory.Exists(tempDir)) Directory.CreateDirectory(tempDir);
|
|
if (!Directory.Exists(destDir)) Directory.CreateDirectory(destDir);
|
|
try
|
|
{
|
|
ZipFile.ExtractToDirectory(filePath, tempDir);
|
|
var dir = new DirectoryInfo(tempDir).GetDirectories();
|
|
if (dir == null || !dir.Any())
|
|
{
|
|
Log.MyLog.WriteLogFile("应用升级失败:文件夹内容为空!", "cmdexelog");
|
|
}
|
|
else
|
|
{
|
|
//SystemManage.CopyDireToDire(dir[0].FullName, destDir);
|
|
SystemManage.CopyDireToDire(tempDir, destDir);
|
|
//配置数据库写入版本号
|
|
ComParameters.Parameters.webVersion = programVersion;
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.webVersion, programVersion);
|
|
ComParameters.Parameters.MainWindow.Dispatcher.Invoke(() =>
|
|
{
|
|
ComParameters.Parameters.VersionInfoViewModel.WebVersion = programVersion;
|
|
|
|
});
|
|
//上传版本号
|
|
Http.UploadVersion();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("应用升级失败:" + ex.Message, "cmdexelog");
|
|
}
|
|
finally
|
|
{
|
|
Directory.Delete(tempDir, true);
|
|
File.Delete(filePath);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ComParameters.Parameters.MessBoxViewModel.Detail = "应用下发异常,请重新下发";
|
|
}
|
|
}
|
|
if (!string.IsNullOrEmpty(appPackageUrl) && !appVersion.Equals(ComParameters.Parameters.containerVersion))
|
|
{
|
|
var name = $"{DateTime.Now.ToString("yyyy-MM-dd")}_co_{appVersion}.zip";
|
|
var filePath = DownLoadFile(appPackageUrl, name, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UpgradeFile"), true);
|
|
ComParameters.Parameters.containerVersion = appVersion;
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.containerVersion, appVersion);
|
|
if (!string.IsNullOrEmpty(filePath))
|
|
{
|
|
ExternalCall.StartExE(AppDomain.CurrentDomain.BaseDirectory + "ConUpdate.exe", true, filePath);
|
|
ExternalCall.CloseContainerServiceLoader();
|
|
Environment.Exit(0);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取APP和应用的更新包失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获取APP和应用的更新包异常:" + ex);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 设备获得密码
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string GetPwd()
|
|
{
|
|
var pwd = "";
|
|
try
|
|
{
|
|
var dic = new Dictionary<string, string>();
|
|
dic.Add("code", ComParameters.Parameters.devCode);
|
|
if (!string.IsNullOrEmpty(ComParameters.Parameters.devCode))
|
|
{
|
|
var api = "/api/device/v1/client/token";
|
|
var httpUri = $"{_httpUrl}{api}";
|
|
var body = JsonConvert.SerializeObject(dic);
|
|
var contentType = "application/json; charset=utf-8";
|
|
var result = Post(httpUri, body, contentType);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code == "200")
|
|
{
|
|
var content = jo.Value<JObject>("data");
|
|
pwd = content.Value<string>("password");
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.pwd, pwd);
|
|
ComParameters.Parameters.pwd = pwd;
|
|
}
|
|
else
|
|
{
|
|
pwd = ComParameters.Parameters.devCode;
|
|
Log.MyLog.WriteLogFile("获取设备密码失败:" + jo.Value<string>("msg"));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pwd = ComParameters.Parameters.devCode;
|
|
Log.MyLog.WriteLogFile("获取设备密码失败:" + result);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
pwd = ComParameters.Parameters.devCode;
|
|
Log.MyLog.WriteLogFile("设备获得密码异常:" + ex);
|
|
}
|
|
return pwd;
|
|
}
|
|
/// <summary>
|
|
/// 上传截图
|
|
/// </summary>
|
|
public void UploadScreenShot()
|
|
{
|
|
try
|
|
{
|
|
var fileName = $"{ComParameters.Parameters.devCode.Replace("-", "")}-{DateTime.Now.ToString("yyMMddhhmmssffff")}.jpg";
|
|
var filePath = SystemManage.PrintScreen(fileName);
|
|
if (string.IsNullOrEmpty(filePath))
|
|
{
|
|
Log.MyLog.WriteLogFile("上传截图失败:截图为空!");
|
|
}
|
|
else
|
|
{
|
|
string api = "/api/device/v1/client/screenShort";
|
|
var dic = new Dictionary<string, string>();
|
|
dic.Add("code", ComParameters.Parameters.devCode);
|
|
dic.Add("timestamp", DateTime.Now.GetMilliTimeStamp().ToString());
|
|
string httpUri = _httpUrl + api;
|
|
var result = UploadFile(httpUri, filePath, dic);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("上传截图失败:" + jo.Value<string>("msg"));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("上传截图失败:" + result);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("上传截图异常:" + ex);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取文件服务器地址
|
|
/// </summary>
|
|
public void GetDownloadUrl()
|
|
{
|
|
try
|
|
{
|
|
//if (string.IsNullOrEmpty(ComParameters.Parameters.downloadUrl))
|
|
//{
|
|
string api = "/api/data/v1/web/getUploadUrl";
|
|
string httpUri = _httpUrl + api;
|
|
var result = Get(httpUri);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("获取文件服务器地址失败:" + jo.Value<string>("msg"));
|
|
}
|
|
else
|
|
{
|
|
var data = jo.Value<string>("data");
|
|
ComParameters.Parameters.downloadUrl = data;
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.downloadUrl, data);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取文件服务器地址失败:" + result);
|
|
}
|
|
//}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获取文件服务器地址异常:" + ex);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 开机设备开关机时间
|
|
/// </summary>
|
|
public void getMachineOnOffTime()
|
|
{
|
|
try
|
|
{
|
|
string api = "/api/device/v1/deviceWeb/getMachineOnOffTime";
|
|
string httpUri = $"{_httpUrl}{api}?code={ComParameters.Parameters.devCode}";
|
|
var result = Get(httpUri);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("获取设备开关机时间失败:" + jo.Value<string>("msg"));
|
|
}
|
|
else
|
|
{
|
|
var cont = jo.Value<JObject>("data");
|
|
var timeModel = cont.Value<JObject>("time");
|
|
var time = timeModel.Value<string>("off");
|
|
if(string.IsNullOrEmpty(time))
|
|
{
|
|
List<MachineOnOffTimeModel> itemList = timeModel.Value<JArray>("weekList").ToObject<List<MachineOnOffTimeModel>>();
|
|
if (itemList.Count == 7)
|
|
{
|
|
ExternalCall.ClearShutDownTime();
|
|
int day = 0;
|
|
foreach (var item in itemList)
|
|
{
|
|
day++;
|
|
switch (day)
|
|
{
|
|
case 1:
|
|
ExternalCall.SetWeekShutDownTime("Mon", item.off);
|
|
break;
|
|
case 2:
|
|
ExternalCall.SetWeekShutDownTime("Tue", item.off);
|
|
break;
|
|
case 3:
|
|
ExternalCall.SetWeekShutDownTime("Wed", item.off);
|
|
break;
|
|
case 4:
|
|
ExternalCall.SetWeekShutDownTime("Thu", item.off);
|
|
break;
|
|
case 5:
|
|
ExternalCall.SetWeekShutDownTime("Fri", item.off);
|
|
break;
|
|
case 6:
|
|
ExternalCall.SetWeekShutDownTime("Sat", item.off);
|
|
break;
|
|
case 7:
|
|
ExternalCall.SetWeekShutDownTime("Sun", item.off);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if (itemList.Count == 0)
|
|
{
|
|
ExternalCall.DeleteWeekShutDownTime();
|
|
ExternalCall.ClearShutDownTime();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ExternalCall.DeleteWeekShutDownTime();
|
|
ExternalCall.SetDayShutDownTime(time);
|
|
}
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取设备开关机时间失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获取设备开关机时间异常:" + ex);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取设备节目列表
|
|
/// </summary>
|
|
public async Task GetProgram()
|
|
{
|
|
try
|
|
{
|
|
var data = new JArray();
|
|
#region 获取新节目列表
|
|
string api = "/api/info/v1/web/getProgramByDeviceCode";
|
|
string httpUri = _httpUrl + api + "?code=" + ComParameters.Parameters.devCode;
|
|
var result = Get(httpUri);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
//记录节目日志
|
|
|
|
Log.MyLog.WriteLogFile(result, "ProgrammeList");
|
|
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("获取设备节目列表失败:" + jo.Value<string>("msg"));
|
|
}
|
|
data = jo.Value<JArray>("data");
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取设备节目列表失败:" + result);
|
|
}
|
|
#endregion
|
|
#region 获取现在的节目列表"ProgrammeList.txt"
|
|
var folderName = "Programme";
|
|
var basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, folderName);
|
|
var programmeListName = "ProgrammeList.txt";
|
|
//删除文件时得排除在外
|
|
var exceptList = new List<string> { programmeListName, "SubtitleList.txt" };
|
|
var filePath = Path.Combine(basePath, programmeListName);
|
|
if (!Directory.Exists(basePath))
|
|
{
|
|
Directory.CreateDirectory(basePath);
|
|
}
|
|
ComParameters.rwl.EnterReadLock();
|
|
var content = FileManage.ReadJsonFile(filePath);
|
|
ComParameters.rwl.ExitReadLock();
|
|
List<ProgrammeModel> nowProgrammeList = null;
|
|
if (!string.IsNullOrEmpty(content))
|
|
{
|
|
nowProgrammeList = JsonConvert.DeserializeObject<List<ProgrammeModel>>(content);
|
|
}
|
|
|
|
#endregion
|
|
|
|
var proList = data.ToString();
|
|
var programmeList = data.ToObject<List<ProgrammeModel>>();
|
|
|
|
#region 删除 现列表和新列表以外的节目(每次只保存上一次和这一次的节目)
|
|
if (!string.IsNullOrEmpty(content))
|
|
{
|
|
await Task.Run(() =>
|
|
{
|
|
var files = new DirectoryInfo(basePath).GetFiles().Select(p => p.Name);
|
|
var allProgrammeList = nowProgrammeList.Union(programmeList).Select(p => p.Img.Substring(p.Img.LastIndexOf("/") + 1));
|
|
var toRemoveFiles = files.Except(allProgrammeList).Where(p => !exceptList.Contains(p));
|
|
foreach (var item in toRemoveFiles)
|
|
{
|
|
File.Delete(basePath + "/" + item);
|
|
}
|
|
});
|
|
}
|
|
#endregion
|
|
#region 更新列表文件并下载节目
|
|
ComParameters.rwl.EnterWriteLock();
|
|
FileManage.WriteJsonFile(filePath, proList);
|
|
ComParameters.rwl.ExitWriteLock();
|
|
foreach (var item in programmeList)
|
|
{
|
|
var fileName = item.Img.Substring(item.Img.LastIndexOf("/") + 1);
|
|
if (!File.Exists(basePath + "/" + fileName))
|
|
{
|
|
DownLoadFile(ComParameters.Parameters.downloadUrl + item.Img, fileName, basePath);
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获取设备节目列表异常:" + ex);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取字幕
|
|
/// </summary>
|
|
public void GetSubtitle()
|
|
{
|
|
try
|
|
{
|
|
string api = "/api/info/v1/web/getSubtitlesByDeviceCode";
|
|
string httpUri = _httpUrl + api + "?code=" + ComParameters.Parameters.devCode;
|
|
var result = Get(httpUri);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("获取字幕失败:" + jo.Value<string>("msg"));
|
|
}
|
|
//记录字幕日志
|
|
Task.Run(() =>
|
|
{
|
|
Log.MyLog.WriteLogFile(result, "SubtitleList");
|
|
});
|
|
var data = jo.Value<JArray>("data");
|
|
var proList = data.ToString();
|
|
#region 写入文件
|
|
var folderName = "Programme";
|
|
var basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, folderName);
|
|
var programmeListName = "SubtitleList.txt";
|
|
var filePath = Path.Combine(basePath, programmeListName);
|
|
if (!Directory.Exists(basePath))
|
|
{
|
|
Directory.CreateDirectory(basePath);
|
|
}
|
|
ComParameters.srwl.EnterWriteLock();
|
|
FileManage.WriteJsonFile(filePath, proList);
|
|
ComParameters.srwl.ExitWriteLock();
|
|
#endregion
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取字幕失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获取字幕异常:" + ex);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 上传日志文件
|
|
/// </summary>
|
|
/// <param name="day"></param>
|
|
/// <param name="msg"></param>
|
|
public void UploadLogFile(int day, string msg = "")
|
|
{
|
|
var initiator = "";
|
|
if (!string.IsNullOrEmpty(msg))
|
|
{
|
|
var jo = JObject.Parse(msg);
|
|
var cont = jo.Value<JObject>("data");
|
|
if (cont.HasValues)
|
|
{
|
|
initiator = cont.Value<string>("initiator");
|
|
}
|
|
}
|
|
var yest = DateTime.Now.AddDays(day).ToString("yyyy-MM-dd");
|
|
var startPath = AppDomain.CurrentDomain.BaseDirectory + @"\log\" + yest;
|
|
var zipPath = AppDomain.CurrentDomain.BaseDirectory + @"\log\" + yest + "Log.zip";
|
|
try
|
|
{
|
|
if (!Directory.Exists(startPath))
|
|
{
|
|
Log.MyLog.WriteLogFile("上传日志文件失败:文件路径未找到:" + startPath, "HttpWarning");
|
|
}
|
|
else
|
|
{
|
|
ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest, true);
|
|
string api = "/api/device/v1/client/log";
|
|
var dic = new Dictionary<string, string>();
|
|
dic.Add("code", ComParameters.Parameters.devCode);
|
|
dic.Add("initiator", initiator);
|
|
dic.Add("type", day == 0 ? "1" : "0");//0-自动 1-手动
|
|
string httpUri = _httpUrl + api;
|
|
var result = UploadFile(httpUri, zipPath, dic);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("上传日志文件失败:路径为 " + zipPath + jo.Value<string>("msg"));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("上传日志文件失败:路径为 " + zipPath + result);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("上传日志文件异常:" + ex);
|
|
}
|
|
finally
|
|
{
|
|
if (File.Exists(zipPath))
|
|
{
|
|
File.Delete(zipPath);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取离线接口列表
|
|
/// </summary>
|
|
public void GetInterfaceApi()
|
|
{
|
|
try
|
|
{
|
|
string api = "/api/device/v1/deviceWeb/getInterfaceApi";
|
|
string httpUri = _httpUrl + api + "?projectCode=" + ComParameters.Parameters.projectCode;
|
|
var result = Get(httpUri);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("获取离线接口列表失败:" + jo.Value<string>("msg"));
|
|
}
|
|
else
|
|
{
|
|
var data = jo.Value<JArray>("data");
|
|
var proList = data.ToString();
|
|
var interfaceList = data.ToObject<List<InterfaceModel>>();
|
|
#region 下载离线接口文件
|
|
var baseDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "www", "static", "offline", "JSON");
|
|
if (!Directory.Exists(baseDir))
|
|
{
|
|
Directory.CreateDirectory(baseDir);
|
|
}
|
|
if (interfaceList.Any())
|
|
{
|
|
var error = new List<InterfaceModel>();
|
|
foreach (var item in interfaceList)
|
|
{
|
|
Task.Run(() =>
|
|
{
|
|
var temp = "";
|
|
if (item.name == "getDevCoordinateByIP")//极特殊接口
|
|
{
|
|
temp = Get(item.url + "?code=" + ComParameters.Parameters.devCode);
|
|
if (!string.IsNullOrEmpty(temp) && temp.Contains("\"code\""))
|
|
{
|
|
var joByIP = JObject.Parse(temp);
|
|
string codeByIP = joByIP.Value<string>("code");
|
|
if (codeByIP == "200")
|
|
{
|
|
var contByIP = joByIP.Value<JObject>("data");
|
|
var deployType = contByIP.Value<string>("deployType");
|
|
if(deployType == "local")
|
|
{
|
|
var xfyunIp = contByIP.Value<string>("xfyunIp");
|
|
var xfyunPort = contByIP.Value<string>("xfyunPort");
|
|
var baiduVoiceServer = contByIP.Value<string>("baiduVoiceServer");
|
|
ComParameters.Parameters.xfyunIp = xfyunIp;
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.xfyunIp, xfyunIp);
|
|
ComParameters.Parameters.xfyunPort = xfyunPort;
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.xfyunPort, xfyunPort);
|
|
ComParameters.Parameters.baiduVoiceServer = baiduVoiceServer;
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.baiduVoiceServer, baiduVoiceServer);
|
|
}
|
|
else
|
|
{
|
|
LocalStorage.DelPipRow("infos", ConfigKey.xfyunIp);
|
|
LocalStorage.DelPipRow("infos", ConfigKey.xfyunPort);
|
|
LocalStorage.DelPipRow("infos", ConfigKey.baiduVoiceServer);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//else if (item.name.ToLower() == "getweather")
|
|
//{
|
|
// temp = Get(item.url);
|
|
//}
|
|
else if (item.url.Contains("?"))
|
|
{
|
|
temp = Get(item.url + "&projectCode=" + ComParameters.Parameters.projectCode);
|
|
}
|
|
else
|
|
{
|
|
switch (item.method)
|
|
{
|
|
case "get":
|
|
{
|
|
temp = Get(item.url + "?projectCode=" + ComParameters.Parameters.projectCode);
|
|
break;
|
|
}
|
|
case "post":
|
|
{
|
|
temp = Post(item.url + "?projectCode=" + ComParameters.Parameters.projectCode, item.parameter);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (temp == "Error" || !temp.Contains("\"code\":200"))
|
|
{
|
|
Log.MyLog.WriteLogFile("下载离线接口文件失败:" + item.url);
|
|
error.Add(item);
|
|
}
|
|
else
|
|
{
|
|
FileManage.WriteJsonFile($"{baseDir}\\{item.name}.json", temp);
|
|
}
|
|
});
|
|
}
|
|
if (error.Any())
|
|
{
|
|
foreach (var item in error)
|
|
{
|
|
var temp = "";
|
|
if (item.name == "getDevCoordinateByIP")
|
|
{
|
|
temp = Get(item.url + "?code=" + ComParameters.Parameters.devCode);
|
|
}
|
|
//else if (item.name.ToLower() == "getweather")
|
|
//{
|
|
// temp = Get(item.url);
|
|
//}
|
|
else if (item.url.Contains("?"))
|
|
{
|
|
temp = Get(item.url + "&projectCode=" + ComParameters.Parameters.projectCode);
|
|
}
|
|
else
|
|
{
|
|
switch (item.method)
|
|
{
|
|
case "get":
|
|
{
|
|
temp = Get(item.url + "?projectCode=" + ComParameters.Parameters.projectCode);
|
|
break;
|
|
}
|
|
case "post":
|
|
{
|
|
temp = Post(item.url + "?projectCode=" + ComParameters.Parameters.projectCode, item.parameter);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (temp == "Error" || !temp.Contains("\"code\":200"))
|
|
{
|
|
Log.MyLog.WriteLogFile("下载离线接口文件失败:" + item.url);
|
|
}
|
|
else
|
|
{
|
|
FileManage.WriteJsonFile($"{baseDir}\\{item.name}.json", temp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取离线接口列表失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获取离线接口列表异常:" + ex);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取资源列表
|
|
/// </summary>
|
|
public void GetFileSource()
|
|
{
|
|
try
|
|
{
|
|
string api = "";
|
|
//if (ConfigurationManager.AppSettings["IsNewKiosk"] == "0")
|
|
//{
|
|
// api = "/api/guidance/v1/web/getFileResource";
|
|
//}
|
|
//else
|
|
//{
|
|
// api = "/api/guide/v1/web/getFileResource";
|
|
//}
|
|
api = "/api/data/v1/web/getFileResource";
|
|
string httpUri = _httpUrl + api + "?projectCode=" + ComParameters.Parameters.projectCode;
|
|
var result = Get(httpUri);
|
|
//Log.MyLog.WriteLogFile("接口地址:" + httpUri + Environment.NewLine + "获取资源列表:" + result);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("获取资源列表失败:" + jo.Value<string>("msg"));
|
|
}
|
|
else
|
|
{
|
|
var data = jo.Value<JArray>("data");
|
|
var fileList = data.ToObject<FileSourceModel[]>();
|
|
var newList = fileList.Select(p => p.url).ToArray();
|
|
var baseDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "www", "static", "offline");
|
|
if (!Directory.Exists(baseDir))
|
|
{
|
|
Directory.CreateDirectory(baseDir);
|
|
}
|
|
ComParameters.Parameters.MessageViewModel.Message = $"获取离线资源文件 0/{newList.Length}";
|
|
for (int i = 0; i < newList.Length; i++)
|
|
{
|
|
ComParameters.Parameters.MessageViewModel.Message = $"获取离线资源文件 {i + 1}/{newList.Length}";
|
|
string[] online = newList[i].Split('?');
|
|
newList[i] = online[0];
|
|
var filePathName = $"{baseDir}{newList[i].Substring(newList[i].IndexOf("/"), newList[i].LastIndexOf("/") - newList[i].IndexOf("/"))}";
|
|
if (!File.Exists(filePathName))
|
|
{
|
|
//按照下载链接的文件夹格式存文件,如"/iotFile/2022/06/20/eeb85afd46da4d83abbf467f41a27135.jpg" 那么 需要在"/iotFile/2022/06/20/"的文件夹下存"eeb85afd46da4d83abbf467f41a27135.jpg"
|
|
DownLoadFile(ComParameters.Parameters.downloadUrl + newList[i], newList[i].Substring(newList[i].LastIndexOf("/") + 1), $"{baseDir}{newList[i].Substring(newList[i].IndexOf("/"), newList[i].LastIndexOf("/") - newList[i].IndexOf("/"))}");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取资源失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获取资源列表异常:" + ex);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取品牌列表Json文件
|
|
/// </summary>
|
|
/// <param name="baseDir"></param>
|
|
public void Getbrand_listJson(string baseDir, string controlsCode)
|
|
{
|
|
try
|
|
{
|
|
string api = "/api/msg/v1/client/getApi/" + controlsCode;
|
|
string httpUri = _httpUrl + api;
|
|
var result = Get(httpUri);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("获取品牌列表Json文件接口失败:" + jo.Value<string>("msg"));
|
|
}
|
|
else
|
|
{
|
|
JArray data = (JArray)jo["data"];
|
|
if (data.Count > 0)
|
|
{
|
|
string jsonText = null;
|
|
foreach (JObject list in data)
|
|
{
|
|
string fileName = (string)list.GetValue("interfaceName");
|
|
string interfaceUrl = (string)list.GetValue("interfaceUrl");
|
|
if (interfaceUrl.Contains("code="))
|
|
interfaceUrl = interfaceUrl.Replace("code=", "code=" + ComParameters.Parameters.devCode);
|
|
if (interfaceUrl.Contains(_httpUrl))
|
|
{
|
|
jsonText = Get(interfaceUrl);
|
|
}
|
|
else
|
|
{
|
|
jsonText = Get(_httpUrl + interfaceUrl);
|
|
}
|
|
if (!Directory.Exists(baseDir))
|
|
{
|
|
Directory.CreateDirectory(baseDir);
|
|
}
|
|
string jsonPath = $"{baseDir}\\{fileName}.json";
|
|
|
|
if (File.Exists(jsonPath))
|
|
{
|
|
File.Delete(jsonPath);
|
|
}
|
|
FileManage.WriteJsonFile(jsonPath, jsonText);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取品牌列表Json文件接口失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获取品牌列表Json文件接口异常:" + ex);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取品牌列表资源文件
|
|
/// </summary>
|
|
/// <param name="baseDir"></param>
|
|
public void Getbrand_listResource(string baseDir,string controlsCode)
|
|
{
|
|
try
|
|
{
|
|
string api = "/api/msg/v1/client/getFileResourceList/" + controlsCode;
|
|
string httpUri = _httpUrl + api ;
|
|
var result = Get(httpUri);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("获取品牌列表资源失败:" + jo.Value<string>("msg"));
|
|
}
|
|
else
|
|
{
|
|
var data = jo.Value<JArray>("data");
|
|
var fileList = data.ToObject<FileSourceModel[]>();
|
|
var newList = fileList.Select(p => p.url).ToArray();
|
|
if (!Directory.Exists(baseDir))
|
|
{
|
|
Directory.CreateDirectory(baseDir);
|
|
}
|
|
for (int i = 0; i < newList.Length; i++)
|
|
{
|
|
string[] online = newList[i].Split('?');
|
|
newList[i] = online[0];
|
|
var filePathName = $"{baseDir}{newList[i].Substring(newList[i].IndexOf("/"), newList[i].LastIndexOf("/") - newList[i].IndexOf("/"))}";
|
|
if (!File.Exists(filePathName))
|
|
{
|
|
//按照下载链接的文件夹格式存文件,如"/iotFile/2022/06/20/eeb85afd46da4d83abbf467f41a27135.jpg" 那么 需要在"/iotFile/2022/06/20/"的文件夹下存"eeb85afd46da4d83abbf467f41a27135.jpg"
|
|
DownLoadFile(ComParameters.Parameters.downloadUrl + newList[i], newList[i].Substring(newList[i].LastIndexOf("/") + 1), $"{baseDir}{newList[i].Substring(newList[i].IndexOf("/"), newList[i].LastIndexOf("/") - newList[i].IndexOf("/"))}");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取品牌列表资源失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获取品牌列表资源异常:" + ex);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 模型资源列表
|
|
/// </summary>
|
|
public void GetModelFileResource(string baseDir)
|
|
{
|
|
try
|
|
{
|
|
string api = "/api/guidance/v1/web/getModelFileResource";
|
|
string httpUri = _httpUrl + api + "?projectCode=" + ComParameters.Parameters.projectCode;
|
|
var result = Get(httpUri);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("获取模型资源列表失败:" + jo.Value<string>("msg"));
|
|
}
|
|
else
|
|
{
|
|
var data = jo.Value<JArray>("data");
|
|
var fileList = data.ToObject<FileSourceModel[]>();
|
|
var newList = fileList.Select(p => p.url).ToArray();
|
|
if (!Directory.Exists(baseDir))
|
|
{
|
|
Directory.CreateDirectory(baseDir);
|
|
}
|
|
for (int i = 0; i < newList.Length; i++)
|
|
{
|
|
string[] online = newList[i].Split('?');
|
|
newList[i] = online[0];
|
|
var filePathName = $"{baseDir}{newList[i].Substring(newList[i].IndexOf("/"), newList[i].LastIndexOf("/") - newList[i].IndexOf("/"))}";
|
|
if (!File.Exists(filePathName))
|
|
{
|
|
//按照下载链接的文件夹格式存文件,如"/iotFile/2022/06/20/eeb85afd46da4d83abbf467f41a27135.jpg" 那么 需要在"/iotFile/2022/06/20/"的文件夹下存"eeb85afd46da4d83abbf467f41a27135.jpg"
|
|
DownLoadFile(ComParameters.Parameters.downloadUrl + newList[i], newList[i].Substring(newList[i].LastIndexOf("/") + 1), $"{baseDir}{newList[i].Substring(newList[i].IndexOf("/"), newList[i].LastIndexOf("/") - newList[i].IndexOf("/"))}");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取模型资源失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获取模型资源列表异常:" + ex);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 容器升级
|
|
/// </summary>
|
|
/// <param name="msg"></param>
|
|
public void AppUpdate(string msg)
|
|
{
|
|
try
|
|
{
|
|
var jo = JObject.Parse(msg);
|
|
var cont = jo.Value<JObject>("data");
|
|
if (cont.HasValues)
|
|
{
|
|
var updateModel = cont.ToObject<AppUpdateModel>();
|
|
var obj = updateModel?.update;
|
|
if (obj == null)
|
|
{
|
|
Log.MyLog.WriteLogFile("容器升级失败:接收数据对象为空!", "cmdexelog");
|
|
}
|
|
var version = obj.version;
|
|
if (version.Equals(ComParameters.Parameters.containerVersion))
|
|
{
|
|
return;
|
|
}
|
|
ComParameters.Parameters.containerVersion = version;
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.containerVersion, version);
|
|
var url = obj.url;
|
|
if (string.IsNullOrEmpty(url))
|
|
{
|
|
Log.MyLog.WriteLogFile("容器升级失败:接收地址为空!", "cmdexelog");
|
|
}
|
|
else
|
|
{
|
|
var name = $"{DateTime.Now.ToString("yyMMddhhmmssffff")}.zip";
|
|
var filePath = DownLoadFile(url, name, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UpgradeFile"), true);
|
|
if (!string.IsNullOrEmpty(filePath))
|
|
{
|
|
ExternalCall.StartExE(AppDomain.CurrentDomain.BaseDirectory + "ConUpdate.exe", true, filePath);
|
|
ExternalCall.ContainerServiceLoaderDelay(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "IOTContainer.exe"));
|
|
ComParameters.Parameters.EdgeWindow.Dispatcher.Invoke(() =>
|
|
{
|
|
ComParameters.Parameters.EdgeWindow.Close();
|
|
});
|
|
Environment.Exit(0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("容器升级异常:" + ex.Message, "cmdexelog");
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 应用升级
|
|
/// </summary>
|
|
/// <param name="msg"></param>
|
|
internal void H5Update(string msg)
|
|
{
|
|
try
|
|
{
|
|
//ExternalCall.CheckStartExplorer();
|
|
|
|
var jo = JObject.Parse(msg);
|
|
var cont = jo.Value<JObject>("data");
|
|
if (cont.HasValues)
|
|
{
|
|
var updateModel = cont.ToObject<AppUpdateModel>();
|
|
var obj = updateModel?.update;
|
|
var version = obj.version;
|
|
var url = obj.url;
|
|
if(version.Equals(ComParameters.Parameters.webVersion))
|
|
{
|
|
return;
|
|
}
|
|
ComParameters.Parameters.MainWindow.Dispatcher.Invoke(() =>
|
|
{
|
|
var mess = new View.MessBoxWindow()
|
|
{
|
|
Owner = Application.Current.MainWindow,
|
|
WindowStartupLocation = WindowStartupLocation.CenterOwner,
|
|
};
|
|
mess.Show();
|
|
ComParameters.Parameters.MessBoxViewModel.Text = "应用升级";
|
|
|
|
});
|
|
if (obj == null)
|
|
{
|
|
Log.MyLog.WriteLogFile("应用升级失败:接收数据对象为空!", "cmdexelog");
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(url))
|
|
{
|
|
Log.MyLog.WriteLogFile("应用升级失败:接收地址为空!", "cmdexelog");
|
|
}
|
|
else
|
|
{
|
|
var name = $"{DateTime.Now.ToString("yyyy-MM-dd")}_h5_{version}.zip";
|
|
var folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UpgradeFile");
|
|
ComParameters.Parameters.MessBoxViewModel.Detail = "开始下载资源文件...";
|
|
var filePath = DownLoadFile(url, name, folder, true);
|
|
ComParameters.Parameters.MessBoxViewModel.Detail = "资源文件下载完成...";
|
|
if (!string.IsNullOrEmpty(filePath))
|
|
{
|
|
var tempDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UpdateTempH5");
|
|
var destDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "www");
|
|
if (!Directory.Exists(tempDir)) Directory.CreateDirectory(tempDir);
|
|
if (!Directory.Exists(destDir)) Directory.CreateDirectory(destDir);
|
|
try
|
|
{
|
|
ComParameters.Parameters.MessBoxViewModel.Detail = "资源文件升级中...";
|
|
ZipFile.ExtractToDirectory(filePath, tempDir);
|
|
var dir = new DirectoryInfo(tempDir).GetDirectories();
|
|
if (dir == null || !dir.Any())
|
|
{
|
|
Log.MyLog.WriteLogFile("应用升级失败:文件夹内容为空!", "cmdexelog");
|
|
}
|
|
else
|
|
{
|
|
//SystemManage.CopyDireToDire(dir[0].FullName, destDir);
|
|
SystemManage.CopyDireToDire(tempDir, destDir);
|
|
//配置数据库写入版本号
|
|
ComParameters.Parameters.webVersion = version;
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.webVersion, version);
|
|
ComParameters.Parameters.VersionInfoViewModel.WebVersion = version;
|
|
//上传版本号
|
|
Http.UploadVersion();
|
|
ComParameters.Parameters.MessBoxViewModel.Detail = "资源文件升级完成...";
|
|
ComParameters.Parameters.MessBoxWindow.Dispatcher.Invoke(() =>
|
|
{
|
|
ComParameters.Parameters.MessBoxWindow.Close();
|
|
});
|
|
//ComParameters.Parameters.MainWindow.Dispatcher.Invoke(() =>
|
|
//{
|
|
// var web = new EdgeWindow();
|
|
// web.Close();
|
|
//});
|
|
//Thread.Sleep(2000);
|
|
if (null == ComParameters.Parameters.EdgeWindow)
|
|
{
|
|
ComParameters.Parameters.MainWindow.Dispatcher.Invoke(() =>
|
|
{
|
|
var web = new EdgeWindow();
|
|
web.Show();
|
|
WinApi.FindSetTop(null, "EdgeWindow");
|
|
});
|
|
}
|
|
else
|
|
{
|
|
ComParameters.Parameters.EdgeWindow.Dispatcher.Invoke(() =>
|
|
{
|
|
ComParameters.Parameters.EdgeWindow.Reload();
|
|
ComParameters.Parameters.EdgeWindow.Activate();
|
|
});
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("应用升级失败:" + ex.Message, "cmdexelog");
|
|
}
|
|
finally
|
|
{
|
|
Directory.Delete(tempDir, true);
|
|
File.Delete(filePath);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ComParameters.Parameters.MessBoxViewModel.Detail = "应用下发异常,请重新下发";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("应用升级异常:" + ex.Message, "cmdexelog");
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 上传节目播放记录
|
|
/// </summary>
|
|
/// <param name="programId"></param>
|
|
/// <param name="proType"></param>
|
|
public async void UploadPlayDetail(string programCode, string duration, int proType = 1)
|
|
{
|
|
try
|
|
{
|
|
await Task.Run(() =>
|
|
{
|
|
var url = _httpUrl + "/api/analysis/v1/web/deviceUseClickDataUpload";
|
|
Dictionary<string, object> json = new Dictionary<string, object>(){
|
|
{ "projectCode", ComParameters.Parameters.projectCode},
|
|
{ "deviceCode",ComParameters.Parameters.devCode},
|
|
{ "tag", "performance" },
|
|
{ "programId", null },
|
|
{ "proType",1},
|
|
{ "performanceCode", programCode },
|
|
{ "duration", duration},
|
|
};
|
|
var result = Post(url, JsonConvert.SerializeObject(json), "application/json; charset=utf-8");
|
|
Log.MyLog.WriteLogFile(result, "UploadPlayDetail");
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("上传节目播放记录失败:" + jo.Value<string>("msg"));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("上传节目播放记录失败:" + result);
|
|
}
|
|
});
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("上传节目播放记录异常:" + ex.Message);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 导视点击数据上报
|
|
/// </summary>
|
|
public void UploadClickData()
|
|
{
|
|
try
|
|
{
|
|
var data = new Dictionary<string, object>();
|
|
var url = _httpUrl + "/api/analysis/v1/web/guideClickDataUpload";
|
|
var result = Post(url, "{\"projectCode\":\"" + ComParameters.Parameters.projectCode + "\",\"deviceCode\":\"" + ComParameters.Parameters.devCode + "\",\"recordType\":\"3\",\"moduleName\":\"\",\"activityCode\":\"\"}", "application/json; charset=utf-8");
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("上传导视点击数据失败:" + jo.Value<string>("msg"));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("上传导视点击数据失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("上传导视点击数据异常:" + ex.Message);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取同屏组主设备信息
|
|
/// </summary>
|
|
public void QueryPrimaryMachine(object noUse)
|
|
{
|
|
try
|
|
{
|
|
var result = Get(_httpUrl + "/api/device/v1/client/getPrimaryMachine?code=" + ComParameters.Parameters.devCode);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
//result = "{\"code\":\"200\",\"data\":{\"ip\":\"192.168.1.242\"}}";
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("获取同屏组主设备信息失败:" + jo.Value<string>("msg"));
|
|
}
|
|
else
|
|
{
|
|
var data = jo.Value<JObject>("data");
|
|
if (data.HasValues)
|
|
{
|
|
if (ComParameters.Parameters.MainMachineIp != data.Value<string>("ip"))//有变化则开始监听
|
|
//if (ComParameters.Parameters.MainMachineIp != data.Value<string>("ip") || (ComParameters.Parameters.IsSync && ComParameters.Parameters.WebSocketIsConnected == false))//有变化则开始监听
|
|
{
|
|
ComParameters.Parameters.IsSync = true;
|
|
ComParameters.Parameters.MainMachineIp = data.Value<string>("ip");
|
|
if (ComParameters.Parameters.MainMachineIp == ComParameters.Parameters.ip)
|
|
{
|
|
//主设备
|
|
ComParameters.Parameters.IsMainMachine = true;
|
|
WebSocketCom.Socket.OpenSocketServer($"ws://{ComParameters.Parameters.MainMachineIp}:{ComParameters.Parameters.SocketPort}");
|
|
}
|
|
else
|
|
{
|
|
//从设备
|
|
ComParameters.Parameters.IsMainMachine = false;
|
|
WebSocketCom.Socket.ListenWebSocket($"ws://{ComParameters.Parameters.MainMachineIp}:{ComParameters.Parameters.SocketPort}");
|
|
}
|
|
//TimeJobs.Jobs.StopQuerySyncMachine();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ComParameters.Parameters.IsSync = false;
|
|
ComParameters.Parameters.MainMachineIp = "";
|
|
WebSocketCom.Socket.StopWebSocketServer();
|
|
WebSocketCom.Socket.StopListen();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取同屏组主设备信息失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("获取同屏组主设备信息异常:" + ex.Message);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 下载分屏节目
|
|
/// </summary>
|
|
public void DownResource()
|
|
{
|
|
Task ac = new Task(() =>//静默下载离线文件
|
|
{
|
|
try
|
|
{
|
|
string api = "/api/msg/v1/web/getScheduleByMachineCode";
|
|
string httpUri = _httpUrl + api + "?code=" + ComParameters.Parameters.devCode;
|
|
var result = Get(httpUri);
|
|
if (!string.IsNullOrEmpty(result) && result.Contains("\"code\""))
|
|
{
|
|
var jo = JObject.Parse(result);
|
|
string code = jo.Value<string>("code");
|
|
//记录节目日志
|
|
Log.MyLog.WriteLogFile(result, "ProgrammeList");
|
|
if (code != "200")
|
|
{
|
|
Log.MyLog.WriteLogFile("获取设备节目列表失败:" + jo.Value<string>("msg"));
|
|
}
|
|
else
|
|
{
|
|
var Jo = JObject.Parse(result);
|
|
List<ProgModel> itemList = Jo.Value<JArray>("data").ToObject<List<ProgModel>>();
|
|
bool flag = DownLoadScreenConfig(itemList, result);
|
|
if (flag)
|
|
{
|
|
ScreenConfigReceiveEvent?.Invoke();
|
|
}
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
Log.MyLog.WriteLogFile("获取设备节目列表失败:" + result);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
Log.MyLog.WriteLogFile("获取设备节目列表异常:" + ex.ToString());
|
|
}
|
|
|
|
});
|
|
ac.Start();
|
|
}
|
|
/// <summary>
|
|
/// 获取后台图片或视频资源地址
|
|
/// </summary
|
|
/// <returns></returns>
|
|
public List<ScheduleModel> GetResource()
|
|
{
|
|
string outLinePath = AppDomain.CurrentDomain.BaseDirectory + "/OutlineFiles";
|
|
if (!Directory.Exists(outLinePath + "/Main"))
|
|
{
|
|
return null;
|
|
}
|
|
else
|
|
{
|
|
if (File.Exists(outLinePath + "/Main/screenconfig.txt"))
|
|
{
|
|
string rev = FileManage.ReadContext(outLinePath + "/Main/screenconfig.txt");
|
|
if (!string.IsNullOrEmpty(rev))
|
|
{
|
|
var Jo = JObject.Parse(rev);
|
|
string code = Jo.Value<string>("code");
|
|
if (code == "200")
|
|
{
|
|
List<ProgModel> itemList = Jo.Value<JArray>("data").ToObject<List<ProgModel>>();
|
|
var Schedule = itemList.Where(i => i.date == DateTime.Now.ToString("yyyy-MM-dd")).FirstOrDefault();
|
|
var ScheduleNoNetLast = itemList.Last();
|
|
if (Schedule != null)
|
|
{
|
|
return Schedule.schedule;
|
|
|
|
}else if(ScheduleNoNetLast != null)
|
|
{
|
|
return ScheduleNoNetLast.schedule;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取天气
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public WeatherViewModel GetEnvironmental(string city)
|
|
{
|
|
WeatherViewModel weather = new WeatherViewModel();
|
|
try
|
|
{
|
|
string api = "/api/data/v1/web/getWeather";
|
|
string httpUri = _httpUrl + api + "?city=" + city;
|
|
var result = Get(httpUri);
|
|
if (!string.IsNullOrEmpty(result))
|
|
{
|
|
Dictionary<string, Object> dic = JsonConvert.DeserializeObject<Dictionary<string, Object>>(result);
|
|
if (!string.IsNullOrEmpty(dic["data"].ToString()) && dic["code"].ToString() == "200")
|
|
{
|
|
Dictionary<string, Object> dicdata = JsonConvert.DeserializeObject<Dictionary<string, Object>>(dic["data"].ToString());
|
|
weather.area = dicdata["area"].ToString();
|
|
weather.temperatureHigh = dicdata["temperatureHigh"].ToString();
|
|
weather.city = dicdata["city"].ToString();
|
|
weather.temperatureNow = dicdata["temperatureNow"].ToString();
|
|
weather.windPower = dicdata["windPower"].ToString();
|
|
weather.temperatureLow = dicdata["temperatureLow"].ToString();
|
|
weather.weather = dicdata["weather"].ToString();
|
|
weather.aqi = dicdata["aqi"].ToString();
|
|
weather.humidity = dicdata["humidity"].ToString();
|
|
weather.windDirection = dicdata["windDirection"].ToString();
|
|
weather.prov = dicdata["prov"].ToString();
|
|
weather.pm = dicdata["pm"].ToString();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("天气获取失败:" + ex.ToString());
|
|
}
|
|
return weather;
|
|
}
|
|
bool done = false;
|
|
private string outLinePath = AppDomain.CurrentDomain.BaseDirectory + "OutlineFiles";
|
|
public bool DownLoadScreenConfig(List<ProgModel> ProgList, string configStr)
|
|
{
|
|
if (!done)
|
|
{
|
|
done = true;
|
|
try
|
|
{
|
|
foreach (var resource in ProgList)
|
|
{
|
|
if (resource == null || resource.schedule == null || resource.schedule.Count == 0)
|
|
{
|
|
continue;
|
|
}
|
|
foreach (var item in resource.schedule)
|
|
{
|
|
if (item != null && item.programs != null)
|
|
{
|
|
foreach (var itemprogram in item.programs)
|
|
{
|
|
if (itemprogram.backgroundMaterial != null)
|
|
{
|
|
var localFileName = string.Empty;
|
|
ProgDownLoadFile(ComParameters.Parameters.downloadUrl + itemprogram.backgroundMaterial, (Path.GetFileName(itemprogram.backgroundMaterial)), outLinePath);
|
|
}
|
|
if (itemprogram.components != null)
|
|
{
|
|
foreach (var itemcomponent in itemprogram.components)
|
|
{
|
|
if (itemcomponent.materials != null)
|
|
{
|
|
foreach (var material in itemcomponent.materials)
|
|
{
|
|
if (string.IsNullOrEmpty(material.fileUrl))
|
|
{
|
|
continue;
|
|
}
|
|
ProgDownLoadFile(ComParameters.Parameters.downloadUrl + material.fileUrl, (Path.GetFileName(material.fileUrl)), outLinePath);
|
|
}
|
|
}
|
|
if (itemcomponent.subComponents != null)
|
|
{
|
|
foreach (var subComponents in itemcomponent.subComponents)
|
|
{
|
|
if (subComponents.materials != null)
|
|
{
|
|
foreach (var materials in subComponents.materials)
|
|
{
|
|
if (!string.IsNullOrEmpty(materials.fileUrl))
|
|
{
|
|
ProgDownLoadFile(ComParameters.Parameters.downloadUrl + materials.fileUrl, (Path.GetFileName(materials.fileUrl)), outLinePath);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
bool flag = Write(outLinePath + "/temp/screenconfig.txt", configStr);
|
|
if (flag)
|
|
{
|
|
DirectoryInfo di = new DirectoryInfo(outLinePath + "/Main");//正式包路径
|
|
DirectoryInfo di2 = new DirectoryInfo(outLinePath + "/temp");//更新包解压路径
|
|
MergeDirectory(di2, di, true);
|
|
done = false;
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
done = false;
|
|
return false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
Log.MyLog.WriteLogFile("下载分屏节目异常:" + ex.ToString());
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
done = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
private bool ProgDownLoadFile(string fileUrl, string localFileName, string folderPath)
|
|
{
|
|
try
|
|
{
|
|
bool finsh = true;
|
|
var tempFolder = outLinePath + "/temp";
|
|
var mainFolder = outLinePath + "/Main";
|
|
if (!Directory.Exists(tempFolder))
|
|
{
|
|
Directory.CreateDirectory(tempFolder);
|
|
}
|
|
if (!File.Exists(tempFolder + "/" + localFileName))
|
|
{
|
|
if (!File.Exists(mainFolder + "/" + localFileName))
|
|
{
|
|
if (File.Exists(tempFolder + "/" + localFileName))
|
|
{
|
|
return true;
|
|
}
|
|
if (File.Exists(tempFolder + "/" + localFileName + ".temp"))
|
|
File.Delete(tempFolder + "/" + localFileName + ".temp");
|
|
using (Stream fileStream = new FileStream(tempFolder + "/" + localFileName + ".temp", FileMode.OpenOrCreate))
|
|
{
|
|
try
|
|
{
|
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileUrl);
|
|
request.AddRange(fileStream.Length);
|
|
|
|
HttpWebResponse respone = (HttpWebResponse)request.GetResponse();
|
|
using (Stream netStream = respone.GetResponseStream())
|
|
{
|
|
long totalDownloadedByte = 0;
|
|
byte[] read = new byte[1024];
|
|
int realReadLen = netStream.Read(read, 0, read.Length);
|
|
while (realReadLen > 0)
|
|
{
|
|
totalDownloadedByte = realReadLen + totalDownloadedByte;
|
|
|
|
fileStream.Write(read, 0, realReadLen);
|
|
realReadLen = netStream.Read(read, 0, read.Length);
|
|
|
|
System.Windows.Forms.Application.DoEvents();
|
|
}
|
|
netStream.Close();
|
|
}
|
|
|
|
if (fileStream.Length != respone.ContentLength)
|
|
{
|
|
|
|
Log.MyLog.WriteLogFile("文件未下载完毕" + "------" + fileStream.Length + "------" + respone.ContentLength);
|
|
finsh = false;
|
|
|
|
}
|
|
fileStream.Close();
|
|
|
|
File.Move(tempFolder + "/" + localFileName + ".temp", tempFolder + "/" + localFileName);
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
fileStream.Close();
|
|
File.Delete(tempFolder + "/" + localFileName + ".temp");
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
File.Copy(mainFolder + "/" + localFileName, tempFolder + "/" + localFileName);
|
|
}
|
|
}
|
|
if (!finsh)
|
|
{
|
|
File.Delete(tempFolder + "/" + localFileName);
|
|
ProgDownLoadFile(fileUrl, localFileName, folderPath);
|
|
return false;
|
|
; }
|
|
return true;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Log.MyLog.WriteLogFile("文件未下载完毕:" + e.ToString());
|
|
return false;
|
|
}
|
|
}
|
|
public bool Write(string path, string configStr)
|
|
{
|
|
try
|
|
{
|
|
if (!Directory.Exists(outLinePath + "/temp"))
|
|
{
|
|
Directory.CreateDirectory(outLinePath + "/temp");
|
|
}
|
|
FileStream fs = new FileStream(path, FileMode.Create);
|
|
StreamWriter sw = new StreamWriter(fs);
|
|
//开始写入
|
|
sw.Write(configStr);
|
|
//清空缓冲区
|
|
sw.Flush();
|
|
//关闭流
|
|
sw.Close();
|
|
fs.Close();
|
|
return true;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
return false;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 拷贝目录内容,删除本身
|
|
/// </summary>
|
|
/// <param name="source">源目录</param>
|
|
/// <param name="destination">目的目录</param>
|
|
/// <param name="copySubDirs">是否拷贝子目录</param>
|
|
public void MergeDirectory(DirectoryInfo source, DirectoryInfo destination, bool copySubDirs)
|
|
{
|
|
if (!destination.Exists)
|
|
{
|
|
destination.Create(); //目标目录若不存在就创建
|
|
}
|
|
if (!source.Exists)
|
|
{
|
|
source.Create(); //目标目录若不存在就创建
|
|
}
|
|
FileInfo[] sourceFiles = source.GetFiles();
|
|
FileInfo[] destinationFiles = destination.GetFiles();
|
|
foreach (var item in sourceFiles)
|
|
{
|
|
if (item.Extension.Contains("txt"))
|
|
{
|
|
item.CopyTo(Path.Combine(destination.FullName, item.Name), true);
|
|
}
|
|
else if ((!File.Exists(Path.Combine(destination.FullName, item.Name))))
|
|
{
|
|
CopyTo(item, Path.Combine(destination.FullName, item.Name));
|
|
}
|
|
}
|
|
|
|
foreach (var item in destinationFiles)
|
|
{
|
|
if (!File.Exists(Path.Combine(source.FullName, item.Name)))
|
|
{
|
|
try
|
|
{
|
|
item.Delete();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
Log.MyLog.WriteLogFile("MergeDirectory:" + ex.ToString());
|
|
}
|
|
}
|
|
}
|
|
DeleteDir(source.FullName, 1);
|
|
}
|
|
/// <summary>
|
|
/// 获取文件MD5 哈希码
|
|
/// </summary>
|
|
/// <param name="fileName"></param>
|
|
/// <returns></returns>
|
|
public string GetMD5HashFromFile(string fileName)
|
|
{
|
|
try
|
|
{
|
|
FileStream file = new FileStream(fileName, FileMode.Open);
|
|
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
|
|
byte[] retVal = md5.ComputeHash(file);
|
|
file.Close();
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
for (int i = 0; i < retVal.Length; i++)
|
|
{
|
|
sb.Append(retVal[i].ToString("x2"));
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("GetMD5HashFromFile:" + ex.ToString());
|
|
return "";
|
|
}
|
|
}
|
|
private void CopyTo(FileInfo tempFile, string mainFilePath)
|
|
{
|
|
try
|
|
{
|
|
string fileTempMD5 = GetMD5HashFromFile(tempFile.FullName);
|
|
tempFile.CopyTo(mainFilePath, true);
|
|
string fileMainMD5 = GetMD5HashFromFile(mainFilePath);
|
|
if (fileTempMD5 != fileMainMD5)
|
|
{
|
|
File.Delete(mainFilePath);
|
|
CopyTo(tempFile, mainFilePath);
|
|
}
|
|
else
|
|
{
|
|
File.Delete(tempFile.FullName);
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Log.MyLog.WriteLogFile("CopyTo:" + e.ToString());
|
|
if (File.Exists(mainFilePath))
|
|
{
|
|
File.Delete(mainFilePath);
|
|
}
|
|
CopyTo(tempFile, mainFilePath);
|
|
}
|
|
}
|
|
public void DeleteDir(string srcPath, int isSelf = 0)
|
|
{
|
|
try
|
|
{
|
|
if (!Directory.Exists(srcPath))
|
|
{
|
|
return;
|
|
}
|
|
DirectoryInfo dir = new DirectoryInfo(srcPath);
|
|
FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录
|
|
foreach (FileSystemInfo i in fileinfo)
|
|
{
|
|
try
|
|
{
|
|
if (i is DirectoryInfo) //判断是否文件夹
|
|
{
|
|
DirectoryInfo subdir = new DirectoryInfo(i.FullName);
|
|
subdir.Delete(true); //删除子目录和文件
|
|
}
|
|
else
|
|
{
|
|
//如果 使用了 streamreader 在删除前 必须先关闭流 ,否则无法删除 sr.close();
|
|
File.Delete(i.FullName); //删除指定文件
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
|
|
}
|
|
}
|
|
if (isSelf == 1)
|
|
{
|
|
dir.Delete();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("DeleteDir:" + ex.ToString());
|
|
}
|
|
}
|
|
public void removeDelegate()
|
|
{
|
|
|
|
if (ScreenConfigReceiveEvent != null)
|
|
{
|
|
System.Delegate[] dels = ScreenConfigReceiveEvent.GetInvocationList();
|
|
for (int i = 0; i < dels.Length; i++)
|
|
{
|
|
ScreenConfigReceiveEvent -= dels[i] as ScreenConfigDelegate;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
}
|
|
|