|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using SlnMesnac.Config;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using TouchSocket.Core;
|
|
|
|
|
using TouchSocket.Sockets;
|
|
|
|
|
|
|
|
|
|
namespace SlnMesnac.TouchSocket
|
|
|
|
|
{
|
|
|
|
|
public class MyTcpClient : TcpClient
|
|
|
|
|
{
|
|
|
|
|
private DebugConfig config = DebugConfig.Instance;
|
|
|
|
|
|
|
|
|
|
private TcpClient tcpClient = new TcpClient();
|
|
|
|
|
|
|
|
|
|
//识别结果
|
|
|
|
|
public delegate void RefreshResult(string result);
|
|
|
|
|
public static event RefreshResult RefreshResultEvent;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public MyTcpClient()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public async Task StartAsync(string ip, string port)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
tcpClient.Connecting = (client, e) => {
|
|
|
|
|
Console.WriteLine($"客户端{client.Port}正在接入服务");
|
|
|
|
|
return EasyTask.CompletedTask;
|
|
|
|
|
};
|
|
|
|
|
tcpClient.Connected = (client, e) => {
|
|
|
|
|
Console.WriteLine($"客户端{client.Port}接入服务成功");
|
|
|
|
|
return EasyTask.CompletedTask;
|
|
|
|
|
};
|
|
|
|
|
tcpClient.Disconnected = (client, e) => {
|
|
|
|
|
Console.WriteLine($"客户端{client.Port}断开连接");
|
|
|
|
|
return EasyTask.CompletedTask;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
tcpClient.Received = (client, e) =>
|
|
|
|
|
{
|
|
|
|
|
//从服务器收到信息
|
|
|
|
|
var mes = Encoding.UTF8.GetString(e.ByteBlock.Buffer, 0, e.ByteBlock.Len);//注意:数据长度是byteBlock.Len
|
|
|
|
|
Console.WriteLine($"{client.Port}接收到信息:{mes}");
|
|
|
|
|
RefreshResultEvent?.Invoke(mes);
|
|
|
|
|
return EasyTask.CompletedTask;
|
|
|
|
|
};
|
|
|
|
|
await tcpClient.ConnectAsync($"{ip}:{port}");
|
|
|
|
|
}catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine(ex.Message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void sendMessage(string type,string msg)
|
|
|
|
|
{
|
|
|
|
|
if(type== "ocr")
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
var request = new Dictionary<string, string>
|
|
|
|
|
{
|
|
|
|
|
{ "image_path", msg },
|
|
|
|
|
{ "service_type", "parse_labels" } // "check_texts", "check_duplicates", "parse_labels"
|
|
|
|
|
};
|
|
|
|
|
// 转换为 JSON 并编码为字节
|
|
|
|
|
string message = JsonConvert.SerializeObject(request);
|
|
|
|
|
byte[] requestBytes = Encoding.UTF8.GetBytes(message);
|
|
|
|
|
|
|
|
|
|
// 发送请求的长度(4字节)
|
|
|
|
|
byte[] lengthBytes = BitConverter.GetBytes(requestBytes.Length);
|
|
|
|
|
if (BitConverter.IsLittleEndian)
|
|
|
|
|
{
|
|
|
|
|
Array.Reverse(lengthBytes); // 如果系统是小端序,需要反转字节顺序
|
|
|
|
|
}
|
|
|
|
|
tcpClient.Send(lengthBytes,0, lengthBytes.Length);
|
|
|
|
|
|
|
|
|
|
tcpClient.Send(requestBytes,0,requestBytes.Length);
|
|
|
|
|
}
|
|
|
|
|
else if(type == "pci")
|
|
|
|
|
{
|
|
|
|
|
// 使用转义字符正确构造字符串
|
|
|
|
|
string message = $"\x00\x00\x00+{{\"image_path\": \"{msg}\"}}";
|
|
|
|
|
tcpClient.Send(message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|