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;
_webSocket.ConnectAsync(new Uri(_serverUri), CancellationToken.None);
Task.Delay(200).Wait();
Parame.webSocket = _webSocket;
ReceiveMessages();
SendHeartbeats();
}
@ -45,127 +45,119 @@ namespace AksWebBrowser.Common
/// <returns></returns>
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);
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);
}
}
}
/// <summary>
@ -174,17 +166,17 @@ namespace AksWebBrowser.Common
/// <returns></returns>
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<byte>(sendBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
await Task.Delay(TimeSpan.FromSeconds(10), CancellationToken.None); //根据需要设置心跳间隔
await Parame.webSocket.SendAsync(new ArraySegment<byte>(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<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
await Parame.webSocket.SendAsync(new ArraySegment<byte>(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)

6
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();
////获取设备

43
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 "";
}
/// <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>
/// 高拍仪
@ -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)
{

7
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<Func> 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; }
//人脸比对阈值

Loading…
Cancel
Save