diff --git a/CPF_Cef/Common/WebSocketClientWithHeartbeat.cs b/CPF_Cef/Common/WebSocketClientWithHeartbeat.cs index 133c890..05aad34 100644 --- a/CPF_Cef/Common/WebSocketClientWithHeartbeat.cs +++ b/CPF_Cef/Common/WebSocketClientWithHeartbeat.cs @@ -29,7 +29,7 @@ namespace AksWebBrowser.Common { _serverUri = Parame.smWebsocket; _webSocket.ConnectAsync(new Uri(_serverUri), CancellationToken.None); - Task.Delay(200).Wait(); + Parame.webSocket = _webSocket; ReceiveMessages(); SendHeartbeats(); } @@ -45,127 +45,119 @@ namespace AksWebBrowser.Common /// private async Task ReceiveMessages() { - while (isstop) + if (Parame.webSocket.State == WebSocketState.Open) { - if (_webSocket.State == WebSocketState.Open) + try { - try + var buffer = new byte[1024 * 1024 * 5]; + var result = await Parame.webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); + if (result.MessageType == WebSocketMessageType.Close) { - var buffer = new byte[1024 * 1024 * 5]; - var result = await _webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); - if (result.MessageType == WebSocketMessageType.Close) - { - // 关闭处理逻辑 - await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); - } - else + // 关闭处理逻辑 + await Parame.webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); + } + else + { + // 处理接收到的消息逻辑 + string body = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count); + if (!string.IsNullOrEmpty(body) && Parame.socket!=null) { - // 处理接收到的消息逻辑 - string body = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count); - if (!string.IsNullOrEmpty(body)) + JObject jo = (JObject)JsonConvert.DeserializeObject(body); + string functionName = jo["functionName"].ToString(); + if (functionName == "CF_OpenCamera") { - JObject jo = (JObject)JsonConvert.DeserializeObject(body); - string functionName = jo["functionName"].ToString(); - if (functionName == "CF_OpenCamera") + string status = jo["success"].ToString(); + if (status == "0") { - string status = jo["success"].ToString(); - if (status == "0") - { - //开始活检 - Send("{\"function\":\"CF_StartLiveDetect\"}", "CF_StartLiveDetect"); - } - else - { - timer.Stop(); - // 断开连接 - _webSocket.Dispose(); - isstop = false; - string commod = "cd /opt/lhtserver/files/bin && nohup ./LhtCamServer.sh &"; - MainModel.Bash(commod); - Task.Delay(1000).Wait(); - MainModel.StartFace(); - } + //开始活检 + Send("{\"function\":\"CF_StartLiveDetect\"}", "CF_StartLiveDetect"); } - else if (functionName == "LiveDetectResult") + else { - Log.Error("LiveDetectResult" + "活检准备"); - string status = string.Empty; - if (body.Contains("success")) - { - status = jo["success"].ToString(); - } - if (string.IsNullOrEmpty(status)) + Log.Error("启用异常补偿服务1!"); + timer.Stop(); + isstop = false; + string commod = "cd /opt/lhtserver/files/bin && nohup ./LhtCamServer.sh &"; + MainModel.Bash(commod); + Task.Delay(200).Wait(); + MainModel.StartFace(); + Log.Error("启用成功1!"); + } + } + else if (functionName == "LiveDetectResult") + { + string status = string.Empty; + if (body.Contains("success")) + { + status = jo["success"].ToString(); + } + if (string.IsNullOrEmpty(status)) + { + string nEventId = jo["nEventId"].ToString(); + if (nEventId == "100") { - string nEventId = jo["nEventId"].ToString(); - if (nEventId == "100") + string results = Parame.ImgBase64; + if (!string.IsNullOrEmpty(results)) { - string results = Parame.ImgBase64; - if (!string.IsNullOrEmpty(results)) + string ImageBase64 = Parame.ImgBase64; + string faceA = Utils.Base64ByImagesPath(ImageBase64.Replace("data:image/jpg;base64,", ""), "faceA"); + string faceB = Utils.Base64ByImagesPath(jo["ImgBase64"].ToString(), "faceB"); + var mode2 = new { - string ImageBase64 = Parame.ImgBase64; - string faceA = Utils.Base64ByImagesPath(ImageBase64.Replace("data:image/jpg;base64,", ""), "faceA"); - string faceB = Utils.Base64ByImagesPath(jo["ImgBase64"].ToString(), "faceB"); - var mode2 = new - { - function = "CF_FaceCompare", - filePathA = faceA, - filePathB = faceB - }; - timer.Stop(); - //开始人脸比对 - Send(JsonConvert.SerializeObject(mode2), "CF_FaceCompare"); - } - else - { - timer.Stop(); - results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一验证失败." + "\"}"; - Parame.socket.Send(results); - // 断开连接 - _webSocket.Dispose(); - } + function = "CF_FaceCompare", + filePathA = faceA, + filePathB = faceB + }; + timer.Stop(); + //开始人脸比对 + Send(JsonConvert.SerializeObject(mode2), "CF_FaceCompare"); + } + else + { + timer.Stop(); + results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一验证失败." + "\"}"; + Parame.socket.Send(results); + isstop = false; } } } - else if (functionName == "CF_FaceCompare") + } + else if (functionName == "CF_FaceCompare") + { + //停止活检 + Send("{\"function\":\"CF_StopLiveDetect\"}", "CF_StopLiveDetect"); + //关闭摄像头 + Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera"); + string status = jo["success"].ToString(); + string results = string.Empty; + if (status == "0") { - Log.Error("CF_FaceCompare" + "活检返回"); - //停止活检 - Send("{\"function\":\"CF_StopLiveDetect\"}", "CF_StopLiveDetect"); - //关闭摄像头 - Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera"); - string status = jo["success"].ToString(); - string results = string.Empty; - if (status == "0") - { - results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "人证合一验证成功." + "\"}"; - } - else - { - results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一验证失败." + "\"}"; - } - timer.Stop(); - Parame.socket.Send(results); - // 断开连接 - _webSocket.Dispose(); - isstop = false; + results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "人证合一验证成功." + "\"}"; } - else if (functionName == "VideoStream") + else { - Log.Error("VideoStream" + "视频返回"); - string VideoBase64 = jo["VideoBase64"].ToString(); - string src = "data:image/jpg;base64," + VideoBase64; - string results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100121" + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + src + "\"}"; - Parame.socket.Send(results); + results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一验证失败." + "\"}"; } + timer.Stop(); + Parame.socket.Send(results); + isstop = false; + } + else if (functionName == "VideoStream") + { + string VideoBase64 = jo["VideoBase64"].ToString(); + string src = "data:image/jpg;base64," + VideoBase64; + string results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100121" + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + src + "\"}"; + Parame.socket.Send(results); } } } - catch (Exception ex) - { - Log.Error("接收消息双目websockt" + ex.Message); - } + } + catch (Exception ex) + { + Log.Error("接收消息双目websockt" + ex.Message); } } + } /// @@ -174,17 +166,17 @@ namespace AksWebBrowser.Common /// private async Task SendHeartbeats() { - while (isstop) + while (true) { - if (_webSocket.State == WebSocketState.Open) + if (Parame.webSocket.State == WebSocketState.Open) { try { // 心跳消息逻辑 var heartbeat = "{\"function\":\"Heartbeat\"}"; var sendBuffer = System.Text.Encoding.UTF8.GetBytes(heartbeat); - await _webSocket.SendAsync(new ArraySegment(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None); - await Task.Delay(TimeSpan.FromSeconds(10), CancellationToken.None); //根据需要设置心跳间隔 + await Parame.webSocket.SendAsync(new ArraySegment(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None); + await Task.Delay(10000); //根据需要设置心跳间隔 } catch (Exception ex) { @@ -205,11 +197,11 @@ namespace AksWebBrowser.Common { funName = _funName; Parame.messageData = string.Empty; - if (_webSocket.State == WebSocketState.Open) + if (Parame.webSocket.State == WebSocketState.Open) { // 发送消息到服务器 var buffer = System.Text.Encoding.UTF8.GetBytes(message); - await _webSocket.SendAsync(new ArraySegment(buffer), WebSocketMessageType.Text, true, CancellationToken.None); + await Parame.webSocket.SendAsync(new ArraySegment(buffer), WebSocketMessageType.Text, true, CancellationToken.None); } if (_funName == "CF_StartLiveDetect") { @@ -235,8 +227,6 @@ namespace AksWebBrowser.Common Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera"); string results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "活体检测超时." + "\"}"; Parame.socket.Send(results); - // 断开连接 - _webSocket.Dispose(); isstop = false; } catch { } @@ -251,10 +241,10 @@ namespace AksWebBrowser.Common { try { - if (_webSocket.State == WebSocketState.Open) + if (Parame.webSocket.State == WebSocketState.Open) { isstop = false; - await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); + await Parame.webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); } } catch (Exception ex) diff --git a/CPF_Cef/FrmMain.cs b/CPF_Cef/FrmMain.cs index b07577a..f15548d 100644 --- a/CPF_Cef/FrmMain.cs +++ b/CPF_Cef/FrmMain.cs @@ -35,8 +35,8 @@ namespace AksWebBrowser Title = "控申业务专用浏览器"; CanResize = false; ShowInTaskbar = true; - //WindowState = WindowState.FullScreen; - WindowState = WindowState.Maximized; + WindowState = WindowState.FullScreen; + //WindowState = WindowState.Maximized; Children.Add( new Border @@ -107,6 +107,8 @@ namespace AksWebBrowser showDev = true; Parame.webBrowser.ShowDev(); } + //WebSocketClientWithHeartbeat webSocket = new WebSocketClientWithHeartbeat(); + //Parame.webSocket2 = webSocket; //获取授权 GetSQObject(); ////获取设备 diff --git a/CPF_Cef/MainModel.cs b/CPF_Cef/MainModel.cs index beb59dd..6b370d9 100644 --- a/CPF_Cef/MainModel.cs +++ b/CPF_Cef/MainModel.cs @@ -2,6 +2,7 @@ using AksWebBrowser.Devices; using AKSWebBrowser.Commen; using CPF.Cef; +using CPF.Windows; using Fleck; using LibVLCSharp.Shared; using Newtonsoft.Json; @@ -177,6 +178,10 @@ namespace AksWebBrowser case "aks100119": result = ReadByBody(); break; + //{"code":"aks100123",faceA:"base64",faceB:"base64"} + case "aks100123": + result = FaseByImage(content); + break; default: result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "" + "\",\"message\":\"Falied\",\"code\":\"400\",\"status\":false,\"data\":\"无效指令\"}"; break; @@ -1653,6 +1658,41 @@ namespace AksWebBrowser } return ""; } + /// + /// base转文件 + /// + /// + public static string FaseByImage(string content) + { + try + { + var param = content.ConvertToAnonymousType(new + { + code = default(string), + faceA = default(string), + faceB = default(string) + }); + if (param == null) + { + return "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "" + "\",\"message\":\"Falied\",\"code\":\"400\",\"status\":false,\"data\":\"" + "参数解析错误" + "\"}"; + } + string faceA = Utils.Base64ByImagesPath(param.faceA, "faceA"); + string faceB = Utils.Base64ByImagesPath(param.faceB, "faceB"); + var mode2 = new + { + filePathA = faceA, + filePathB = faceB + }; + return "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + param.code + "\",\"message\":\"seccse\",\"code\":\"200\",\"status\":true,\"data\":\"" + JsonConvert.SerializeObject(mode2) + "\"}"; + } + catch (Exception ex) + { + //Log.Error("执行文件异常:" + ex.Message); + return "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "" + "\",\"message\":\"Falied\",\"code\":\"400\",\"status\":false,\"data\":\"" + ex.Message + "\"}"; + } + } + + /// /// 高拍仪 @@ -1784,7 +1824,6 @@ namespace AksWebBrowser { try { - WebSocketClientWithHeartbeat webSocket = new WebSocketClientWithHeartbeat(); var mode = new { function = "CF_OpenCamera", @@ -1795,7 +1834,7 @@ namespace AksWebBrowser fh = 600 }; //打开摄像头 - webSocket.Send(JsonConvert.SerializeObject(mode), "CF_OpenCamera"); + Parame.webSocket2.Send(JsonConvert.SerializeObject(mode), "CF_OpenCamera"); } catch (Exception ex) { diff --git a/CPF_Cef/Parame.cs b/CPF_Cef/Parame.cs index 08346f5..d2b1f84 100644 --- a/CPF_Cef/Parame.cs +++ b/CPF_Cef/Parame.cs @@ -1,4 +1,5 @@ using AksWebBrowser; +using AksWebBrowser.Common; using CPF.Controls; using Fleck; using System; @@ -17,6 +18,8 @@ namespace AksWebBrowser public static TcpClient tcpClient { get; set; } public static CusWebBrowser webBrowser { get; set; } public static Window frm { get; set; } + public static ClientWebSocket webSocket { get; set; } + public static WebSocketClientWithHeartbeat webSocket2 { get; set; } public static List FuncObject { get; set; } //接口地址 public static string apiUrl = "http://192.168.0.234:8098";//"http://143.169.62.3:8098";// @@ -31,7 +34,7 @@ namespace AksWebBrowser //高拍仪devIndex public static string gpydevIndex = "0"; //签字版、指纹、身份证 - public static string signUrl = "http://127.0.0.1:9399/device"; + public static string signUrl = "http://192.168.0.234:9399/device"; //请求超时 public static int timeout = 3000; //票据打印机 @@ -47,7 +50,7 @@ namespace AksWebBrowser //是否关闭授权定时请求 public static bool isCloseHttp = false; //双目摄像头 - public static string smWebsocket = "ws://127.0.0.1:22226"; + public static string smWebsocket = "ws://192.168.0.234:22226"; //消息推送 public static string messageData { get; set; } //人脸比对阈值