using DemoUI.SDK; using Emgu.CV; using Fleck; using Newtonsoft.Json; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Configuration; using System.Runtime.InteropServices; namespace DemoUI.Common { public class ChatWebSocketMiddleware { public static List allSockets = new List(); //public static List allSocketsForTest = new List(); public static List allSocketsForLive = new List(); //public static List faceSockets = new List(); public static Dictionary faceSocketLists = new Dictionary(); public Dictionary faceSocketsList = new Dictionary(); public static string CurFaceID = string.Empty; public static Mat CurFaceImage = null; public static cw_face_res_t? CurFaceModel = null; public static object NoFaceModel = new { faceID = "", isValid = false, beautyScore = 0, faceImage = "", genderMale = "" }; public static bool isLive = false; //public static bool isTestLive = false; private QMLog log = new QMLog(); public void openSocket() { FleckLog.Level = LogLevel.Debug; var ws = ConfigurationManager.AppSettings["websocketUrl"]; var server = new WebSocketServer(ws); server.Start(socket => { socket.OnOpen = () => //当建立Socket链接时执行此方法 { allSockets.Clear(); //var data = socket.ConnectionInfo; //通过data可以获得这个链接传递过来的Cookie信息,用来区分各个链接和用户之间的关系(如果需要后台主动推送信息到某个客户的时候,可以使用Cookie) allSockets.Add(socket); if (!string.IsNullOrEmpty(CurFaceID)) { socket.Send(CurFaceID); } }; socket.OnClose = () =>// 当关闭Socket链接十执行此方法 { //Console.WriteLine("Close!"); allSockets.Remove(socket); }; socket.OnMessage = message =>// 接收客户端发送过来的信息 { if (message == "face") { if (!string.IsNullOrEmpty(CurFaceID)) { Dictionary dicData = JsonConvert.DeserializeObject>(CurFaceID); var faceData = new { faceID = dicData["faceID"], isValid = true, beautyScore = dicData["beautyScore"], faceImage = dicData["faceImage"], genderMale = dicData["genderMale"] }; socket.Send(JsonConvert.SerializeObject(faceData)); } //if (CurFaceImage != null && CurFaceModel.HasValue) // SendFaceForKiosk(CurFaceImage, CurFaceModel.Value, socket); } else if (message == "openlive") { isLive = true; } else if (message == "closelive") { log.WriteLogFile("进来了", "2222222222222"); ChatWebSocketMiddleware.isLive = false; } else if (message == "startexplorer") { 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(); } //Console.WriteLine(message); //socket.Send("Echo: " + message); //allSockets.ToList().ForEach(s => s.Send("Echo: " + message)); }; }); } //public void openSocketForTest() //{ // FleckLog.Level = LogLevel.Debug; // var ws = "ws://192.168.1.128:7189"; // var server = new WebSocketServer(ws); // server.Start(socket => // { // socket.OnOpen = () => //当建立Socket链接时执行此方法 // { // //var data = socket.ConnectionInfo; //通过data可以获得这个链接传递过来的Cookie信息,用来区分各个链接和用户之间的关系(如果需要后台主动推送信息到某个客户的时候,可以使用Cookie) // allSocketsForTest.Add(socket); // }; // socket.OnClose = () =>// 当关闭Socket链接十执行此方法 // { // //Console.WriteLine("Close!"); // allSocketsForTest.Remove(socket); // }; // socket.OnMessage = message =>// 接收客户端发送过来的信息 // { // if (message == "openlive") // { // isTestLive = true; // } // else if (message == "closelive") // { // ChatWebSocketMiddleware.isTestLive = false; // } // //Console.WriteLine(message); // //socket.Send("Echo: " + message); // //allSockets.ToList().ForEach(s => s.Send("Echo: " + message)); // }; // }); //} public void openSocketForLive() { FleckLog.Level = LogLevel.Debug; var ws = ConfigurationManager.AppSettings["websocketForLive"]; var server = new WebSocketServer(ws); server.Start(socket => { socket.OnOpen = () => //当建立Socket链接时执行此方法 { //ChatWebSocketMiddleware.isLive = true; //var data = socket.ConnectionInfo.Id; //通过data可以获得这个链接传递过来的Cookie信息,用来区分各个链接和用户之间的关系(如果需要后台主动推送信息到某个客户的时候,可以使用Cookie) allSocketsForLive.Clear(); allSocketsForLive.Add(socket); }; socket.OnClose = () =>// 当关闭Socket链接十执行此方法 { ChatWebSocketMiddleware.isLive = false; //Console.WriteLine("Close!"); allSocketsForLive.Remove(socket); }; socket.OnMessage = message =>// 接收客户端发送过来的信息 { if (message == "openlive") { ChatWebSocketMiddleware.isLive = true; } else if (message == "closelive") { ChatWebSocketMiddleware.isLive = false; } //Console.WriteLine(message); //socket.Send("Echo: " + message); //allSockets.ToList().ForEach(s => s.Send("Echo: " + message)); }; }); } public void openSocketForFace() { FleckLog.Level = LogLevel.Debug; var ws = ConfigurationManager.AppSettings["websocketForFace"]; var server = new WebSocketServer(ws); server.Start(socket => { socket.OnOpen = () => //当建立Socket链接时执行此方法 { log.WriteLogFile("屏保socket111111","face"); var data = socket.ConnectionInfo.ClientPort.ToString(); //通过data可以获得这个链接传递过来的Cookie信息,用来区分各个链接和用户之间的关系(如果需要后台主动推送信息到某个客户的时候,可以使用Cookie) log.WriteLogFile(JsonConvert.SerializeObject(socket.ConnectionInfo), "123"); //if (!faceSocketsList.ContainsKey(data)) { // faceSockets.Add(socket); //} //faceSockets.Clear(); if (socket.ConnectionInfo.Path.Length > 1) { if (faceSocketLists.ContainsKey("信发")) { faceSocketLists["信发"].Close(); faceSocketLists["信发"] = socket; } else { faceSocketLists.Add("信发", socket); } socket.Send("ok"); } else { if (faceSocketLists.ContainsKey("导视")) { faceSocketLists["导视"] = socket; } else { faceSocketLists.Add("导视", socket); } } //if (!faceSockets.Contains(socket)) { // faceSockets.Add(socket); // } // log.WriteLogFile(faceSockets.Count.ToString(), "123"); //if (!faceSockets.Contains(socket)) //{ // faceSockets.Add(socket); //} }; socket.OnMessage = message =>// 接收客户端发送过来的信息 { log.WriteLogFile(message, "face"); if (message.IndexOf("导航") >= 0) { var faceData = new { faceID = "-1", faceImage = message.Replace("导航", "") }; if (faceSocketLists.ContainsKey("导视")) { faceSocketLists["导视"].Send(JsonConvert.SerializeObject(faceData)); } } else if (message.IndexOf("首页") >= 0) { var faceData = new { faceID = "-1", faceImage = message }; if (faceSocketLists.ContainsKey("导视")) { faceSocketLists["导视"].Send(JsonConvert.SerializeObject(faceData)); } } //log.WriteLogFile(message,"人脸点击"); //allSockets.ForEach(s => s.Send("Echo: " + message)); //Console.WriteLine(message); //socket.Send("Echo: " + message); //allSockets.ToList().ForEach(s => s.Send("Echo: " + message)); }; }); } } }