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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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