Browse Source

新增base64图片落地文件

master
胡超1 1 year ago
parent
commit
475c465c6b
  1. 208
      CPF_Cef/Common/WebSocketClientWithHeartbeat.cs
  2. 6
      CPF_Cef/FrmMain.cs
  3. 43
      CPF_Cef/MainModel.cs
  4. 7
      CPF_Cef/Parame.cs

208
CPF_Cef/Common/WebSocketClientWithHeartbeat.cs

@ -29,7 +29,7 @@ namespace AksWebBrowser.Common
{ {
_serverUri = Parame.smWebsocket; _serverUri = Parame.smWebsocket;
_webSocket.ConnectAsync(new Uri(_serverUri), CancellationToken.None); _webSocket.ConnectAsync(new Uri(_serverUri), CancellationToken.None);
Task.Delay(200).Wait(); Parame.webSocket = _webSocket;
ReceiveMessages(); ReceiveMessages();
SendHeartbeats(); SendHeartbeats();
} }
@ -45,127 +45,119 @@ namespace AksWebBrowser.Common
/// <returns></returns> /// <returns></returns>
private async Task ReceiveMessages() 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<byte>(buffer), CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Close)
{ {
var buffer = new byte[1024 * 1024 * 5]; // 关闭处理逻辑
var result = await _webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); await Parame.webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Close) }
{ else
// 关闭处理逻辑 {
await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); // 处理接收到的消息逻辑
} string body = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count);
else if (!string.IsNullOrEmpty(body) && Parame.socket!=null)
{ {
// 处理接收到的消息逻辑 JObject jo = (JObject)JsonConvert.DeserializeObject(body);
string body = System.Text.Encoding.UTF8.GetString(buffer, 0, result.Count); string functionName = jo["functionName"].ToString();
if (!string.IsNullOrEmpty(body)) if (functionName == "CF_OpenCamera")
{ {
JObject jo = (JObject)JsonConvert.DeserializeObject(body); string status = jo["success"].ToString();
string functionName = jo["functionName"].ToString(); if (status == "0")
if (functionName == "CF_OpenCamera")
{ {
string status = jo["success"].ToString(); //开始活检
if (status == "0") Send("{\"function\":\"CF_StartLiveDetect\"}", "CF_StartLiveDetect");
{
//开始活检
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();
}
} }
else if (functionName == "LiveDetectResult") else
{ {
Log.Error("LiveDetectResult" + "活检准备"); Log.Error("启用异常补偿服务1!");
string status = string.Empty; timer.Stop();
if (body.Contains("success")) isstop = false;
{ string commod = "cd /opt/lhtserver/files/bin && nohup ./LhtCamServer.sh &";
status = jo["success"].ToString(); MainModel.Bash(commod);
} Task.Delay(200).Wait();
if (string.IsNullOrEmpty(status)) 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(); string results = Parame.ImgBase64;
if (nEventId == "100") if (!string.IsNullOrEmpty(results))
{ {
string results = Parame.ImgBase64; string ImageBase64 = Parame.ImgBase64;
if (!string.IsNullOrEmpty(results)) 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; function = "CF_FaceCompare",
string faceA = Utils.Base64ByImagesPath(ImageBase64.Replace("data:image/jpg;base64,", ""), "faceA"); filePathA = faceA,
string faceB = Utils.Base64ByImagesPath(jo["ImgBase64"].ToString(), "faceB"); filePathB = faceB
var mode2 = new };
{ timer.Stop();
function = "CF_FaceCompare", //开始人脸比对
filePathA = faceA, Send(JsonConvert.SerializeObject(mode2), "CF_FaceCompare");
filePathB = faceB }
}; else
timer.Stop(); {
//开始人脸比对 timer.Stop();
Send(JsonConvert.SerializeObject(mode2), "CF_FaceCompare"); results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一验证失败." + "\"}";
} Parame.socket.Send(results);
else isstop = false;
{
timer.Stop();
results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一验证失败." + "\"}";
Parame.socket.Send(results);
// 断开连接
_webSocket.Dispose();
}
} }
} }
} }
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" + "活检返回"); results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"success\",\"code\":\"200\",\"status\":true,\"data\":\"" + "人证合一验证成功." + "\"}";
//停止活检
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;
} }
else if (functionName == "VideoStream") else
{ {
Log.Error("VideoStream" + "视频返回"); results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "人证合一验证失败." + "\"}";
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);
} }
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) }
{ catch (Exception ex)
Log.Error("接收消息双目websockt" + ex.Message); {
} Log.Error("接收消息双目websockt" + ex.Message);
} }
} }
} }
/// <summary> /// <summary>
@ -174,17 +166,17 @@ namespace AksWebBrowser.Common
/// <returns></returns> /// <returns></returns>
private async Task SendHeartbeats() private async Task SendHeartbeats()
{ {
while (isstop) while (true)
{ {
if (_webSocket.State == WebSocketState.Open) if (Parame.webSocket.State == WebSocketState.Open)
{ {
try try
{ {
// 心跳消息逻辑 // 心跳消息逻辑
var heartbeat = "{\"function\":\"Heartbeat\"}"; var heartbeat = "{\"function\":\"Heartbeat\"}";
var sendBuffer = System.Text.Encoding.UTF8.GetBytes(heartbeat); var sendBuffer = System.Text.Encoding.UTF8.GetBytes(heartbeat);
await _webSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None); await Parame.webSocket.SendAsync(new ArraySegment<byte>(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
await Task.Delay(TimeSpan.FromSeconds(10), CancellationToken.None); //根据需要设置心跳间隔 await Task.Delay(10000); //根据需要设置心跳间隔
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -205,11 +197,11 @@ namespace AksWebBrowser.Common
{ {
funName = _funName; funName = _funName;
Parame.messageData = string.Empty; Parame.messageData = string.Empty;
if (_webSocket.State == WebSocketState.Open) if (Parame.webSocket.State == WebSocketState.Open)
{ {
// 发送消息到服务器 // 发送消息到服务器
var buffer = System.Text.Encoding.UTF8.GetBytes(message); var buffer = System.Text.Encoding.UTF8.GetBytes(message);
await _webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None); await Parame.webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
} }
if (_funName == "CF_StartLiveDetect") if (_funName == "CF_StartLiveDetect")
{ {
@ -235,8 +227,6 @@ namespace AksWebBrowser.Common
Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera"); Send("{\"function\":\"CF_CloseCamera\"}", "CF_CloseCamera");
string results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "活体检测超时." + "\"}"; string results = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "aks100120" + "\",\"message\":\"fali\",\"code\":\"400\",\"status\":false,\"data\":\"" + "活体检测超时." + "\"}";
Parame.socket.Send(results); Parame.socket.Send(results);
// 断开连接
_webSocket.Dispose();
isstop = false; isstop = false;
} }
catch { } catch { }
@ -251,10 +241,10 @@ namespace AksWebBrowser.Common
{ {
try try
{ {
if (_webSocket.State == WebSocketState.Open) if (Parame.webSocket.State == WebSocketState.Open)
{ {
isstop = false; isstop = false;
await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); await Parame.webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);
} }
} }
catch (Exception ex) catch (Exception ex)

6
CPF_Cef/FrmMain.cs

@ -35,8 +35,8 @@ namespace AksWebBrowser
Title = "控申业务专用浏览器"; Title = "控申业务专用浏览器";
CanResize = false; CanResize = false;
ShowInTaskbar = true; ShowInTaskbar = true;
//WindowState = WindowState.FullScreen; WindowState = WindowState.FullScreen;
WindowState = WindowState.Maximized; //WindowState = WindowState.Maximized;
Children.Add( Children.Add(
new Border new Border
@ -107,6 +107,8 @@ namespace AksWebBrowser
showDev = true; showDev = true;
Parame.webBrowser.ShowDev(); Parame.webBrowser.ShowDev();
} }
//WebSocketClientWithHeartbeat webSocket = new WebSocketClientWithHeartbeat();
//Parame.webSocket2 = webSocket;
//获取授权 //获取授权
GetSQObject(); GetSQObject();
////获取设备 ////获取设备

43
CPF_Cef/MainModel.cs

@ -2,6 +2,7 @@
using AksWebBrowser.Devices; using AksWebBrowser.Devices;
using AKSWebBrowser.Commen; using AKSWebBrowser.Commen;
using CPF.Cef; using CPF.Cef;
using CPF.Windows;
using Fleck; using Fleck;
using LibVLCSharp.Shared; using LibVLCSharp.Shared;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -177,6 +178,10 @@ namespace AksWebBrowser
case "aks100119": case "aks100119":
result = ReadByBody(); result = ReadByBody();
break; break;
//{"code":"aks100123",faceA:"base64",faceB:"base64"}
case "aks100123":
result = FaseByImage(content);
break;
default: default:
result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "" + "\",\"message\":\"Falied\",\"code\":\"400\",\"status\":false,\"data\":\"无效指令\"}"; result = "{\"timestamp\":\"" + Utils.GetTimestamp() + "\",\"keycode\":\"" + "" + "\",\"message\":\"Falied\",\"code\":\"400\",\"status\":false,\"data\":\"无效指令\"}";
break; break;
@ -1653,6 +1658,41 @@ namespace AksWebBrowser
} }
return ""; return "";
} }
/// <summary>
/// base转文件
/// </summary>
/// <returns></returns>
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 + "\"}";
}
}
/// <summary> /// <summary>
/// 高拍仪 /// 高拍仪
@ -1784,7 +1824,6 @@ namespace AksWebBrowser
{ {
try try
{ {
WebSocketClientWithHeartbeat webSocket = new WebSocketClientWithHeartbeat();
var mode = new var mode = new
{ {
function = "CF_OpenCamera", function = "CF_OpenCamera",
@ -1795,7 +1834,7 @@ namespace AksWebBrowser
fh = 600 fh = 600
}; };
//打开摄像头 //打开摄像头
webSocket.Send(JsonConvert.SerializeObject(mode), "CF_OpenCamera"); Parame.webSocket2.Send(JsonConvert.SerializeObject(mode), "CF_OpenCamera");
} }
catch (Exception ex) catch (Exception ex)
{ {

7
CPF_Cef/Parame.cs

@ -1,4 +1,5 @@
using AksWebBrowser; using AksWebBrowser;
using AksWebBrowser.Common;
using CPF.Controls; using CPF.Controls;
using Fleck; using Fleck;
using System; using System;
@ -17,6 +18,8 @@ namespace AksWebBrowser
public static TcpClient tcpClient { get; set; } public static TcpClient tcpClient { get; set; }
public static CusWebBrowser webBrowser { get; set; } public static CusWebBrowser webBrowser { get; set; }
public static Window frm { get; set; } public static Window frm { get; set; }
public static ClientWebSocket webSocket { get; set; }
public static WebSocketClientWithHeartbeat webSocket2 { get; set; }
public static List<Func> FuncObject { get; set; } public static List<Func> FuncObject { get; set; }
//接口地址 //接口地址
public static string apiUrl = "http://192.168.0.234:8098";//"http://143.169.62.3:8098";// public static string apiUrl = "http://192.168.0.234:8098";//"http://143.169.62.3:8098";//
@ -31,7 +34,7 @@ namespace AksWebBrowser
//高拍仪devIndex //高拍仪devIndex
public static string gpydevIndex = "0"; 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; public static int timeout = 3000;
//票据打印机 //票据打印机
@ -47,7 +50,7 @@ namespace AksWebBrowser
//是否关闭授权定时请求 //是否关闭授权定时请求
public static bool isCloseHttp = false; 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; } public static string messageData { get; set; }
//人脸比对阈值 //人脸比对阈值

Loading…
Cancel
Save