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.
175 lines
8.0 KiB
175 lines
8.0 KiB
using Container.Business;
|
|
using Container.Common;
|
|
using Container.Model;
|
|
using Container.Win;
|
|
using Fleck;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Configuration;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
|
|
namespace Container.Services
|
|
{
|
|
public class WebSocketForKiosk
|
|
{
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|
static extern IntPtr FindWindow(string IpClassName, string IpWindowName);
|
|
public static List<IWebSocketConnection> allSocketsForKiosk = new List<IWebSocketConnection>();
|
|
private Class_Log log = new Class_Log();
|
|
App app = ((App)Application.Current);
|
|
PlayBackManage pbm = new PlayBackManage();
|
|
public void openSocket()
|
|
{
|
|
FleckLog.Level = LogLevel.Debug;
|
|
var ws = ConfigurationManager.AppSettings["websocketForKiosk"];
|
|
var server = new WebSocketServer(ws);
|
|
server.Start(socket =>
|
|
{
|
|
socket.OnOpen = () => //当建立Socket链接时执行此方法
|
|
{
|
|
//var data = socket.ConnectionInfo; //通过data可以获得这个链接传递过来的Cookie信息,用来区分各个链接和用户之间的关系(如果需要后台主动推送信息到某个客户的时候,可以使用Cookie)
|
|
allSocketsForKiosk.Add(socket);
|
|
};
|
|
|
|
socket.OnClose = () =>// 当关闭Socket链接十执行此方法
|
|
{
|
|
//Console.WriteLine("Close!");
|
|
allSocketsForKiosk.Remove(socket);
|
|
};
|
|
|
|
socket.OnMessage = message =>// 接收客户端发送过来的信息
|
|
{
|
|
log.WriteLogFile(message, "kiosk");
|
|
if (message.Contains("version"))
|
|
{
|
|
app.kioskVersion = message.Substring(message.LastIndexOf(':') + 1);
|
|
app.Appversion = app.kioskVersion;
|
|
app.AppPlayNameCH = "导视";
|
|
app.AppPlayName = "chrome";
|
|
app.CurAppPlayName = app.AppPlayName;
|
|
WebSocketForKiosk.allSocketsForKiosk.ToList().ForEach(s => s.Send("kiosk"));
|
|
}
|
|
else if (message == "startexplorer")
|
|
{
|
|
|
|
Process[] pro = Process.GetProcesses();
|
|
for (int i = 0; i < pro.Length; i++)
|
|
{
|
|
//if (pro[i].ProcessName.ToLower() == "chrome" )
|
|
if (pro[i].ProcessName.ToLower() == "chrome")
|
|
{
|
|
pro[i].CloseMainWindow();
|
|
}
|
|
}
|
|
|
|
System.Diagnostics.Process process = new System.Diagnostics.Process();
|
|
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
|
|
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
|
|
startInfo.FileName = "cmd.exe";
|
|
process.StartInfo = startInfo;
|
|
process.StartInfo.RedirectStandardInput = true;
|
|
process.StartInfo.RedirectStandardOutput = true;
|
|
process.StartInfo.UseShellExecute = false;
|
|
process.Start();
|
|
process.StandardInput.WriteLine(Environment.GetEnvironmentVariable("windir") + "\\explorer.exe");
|
|
process.StandardInput.Flush();
|
|
process.StandardInput.Close();
|
|
process.WaitForExit();
|
|
deleteSchtasks("ContainerService");
|
|
//Environment.Exit(0);
|
|
}
|
|
else if (message == "pcscreensavers")
|
|
{
|
|
bool pcstart = false;
|
|
IntPtr Win = FindWindow(null, "WindowView");//设置置顶
|
|
if (Win != null && Win != IntPtr.Zero)
|
|
{
|
|
pcstart = true;
|
|
//SetWindowPos(Win, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
}
|
|
if (!pcstart)
|
|
{
|
|
App.Current.Dispatcher.Invoke((Action)(() =>
|
|
{
|
|
try
|
|
{
|
|
//app.IsCanConnect = MyHttpClient.IsCanConnect(app.HttpUrl);
|
|
//if (app.IsCanConnect)
|
|
//{
|
|
List<ProgModel> result = pbm.GetResource();
|
|
//ScreenSavers result = pbm.GetResourceForLoad();
|
|
if ((result != null && result.Count > 0))
|
|
{
|
|
app.AppPlayNameCH = "信息发布";
|
|
app.CurAppPlayName = "pcscreensavers";
|
|
app.AppPlayName = "pcscreensavers";
|
|
app.Appversion = app.Containerversion;
|
|
WindowViewNew windowView = new WindowViewNew(0);
|
|
windowView.Show();
|
|
}
|
|
//}
|
|
//else
|
|
//{
|
|
// List<Tuple<ResInfo, Transition>> result = pbm.GetResource(1);
|
|
// if (result != null && result.Count > 0)
|
|
// {
|
|
// app.AppPlayNameCH = "信息发布";
|
|
// app.CurAppPlayName = "pcscreensavers";
|
|
// app.AppPlayName = "pcscreensavers";
|
|
// app.Appversion = app.Containerversion;
|
|
// WindowView windowView = new WindowView(0);
|
|
// windowView.Show();
|
|
// }
|
|
//}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.WriteLogFile(ex.ToString(), "errorrrr");
|
|
}
|
|
}));
|
|
}
|
|
}
|
|
};
|
|
});
|
|
|
|
}
|
|
|
|
private void deleteSchtasks(string schtaskName)
|
|
{
|
|
try
|
|
{
|
|
Process MyProcess = new Process();
|
|
//设定程序名
|
|
MyProcess.StartInfo.FileName = "cmd.exe";
|
|
|
|
//关闭Shell的使用
|
|
MyProcess.StartInfo.UseShellExecute = false;
|
|
//重定向标准输入
|
|
MyProcess.StartInfo.RedirectStandardInput = true;
|
|
//重定向标准输出
|
|
MyProcess.StartInfo.RedirectStandardOutput = true;
|
|
//重定向错误输出
|
|
MyProcess.StartInfo.RedirectStandardError = true;
|
|
//设置不显示窗口
|
|
MyProcess.StartInfo.CreateNoWindow = true;
|
|
string cmdtext = "schtasks /delete /tn " + schtaskName + " -f"; //关机
|
|
log.WriteLogFile(cmdtext, "cmdexelog");
|
|
|
|
//执行VER命令
|
|
MyProcess.Start();
|
|
|
|
MyProcess.StandardInput.WriteLine(cmdtext);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.WriteLogFile(ex.ToString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|