You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
3.3 KiB
C#

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);
}
}
}
}