2025-03-16 03:17:36 +08:00
|
|
|
using System.Net.Sockets;
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
namespace Seyounth.Hyosung.Core.Printer;
|
|
|
|
|
|
|
|
public class AveryPrinter(string host, int port)
|
|
|
|
{
|
|
|
|
public string Host => host;
|
|
|
|
public int Port => port;
|
2025-03-25 16:31:41 +08:00
|
|
|
private Socket _socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
2025-03-16 03:17:36 +08:00
|
|
|
|
|
|
|
public async Task ConnectAsync(CancellationToken token)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
await _socket.ConnectAsync(Host, Convert.ToInt32(port), token);
|
2025-03-25 16:31:41 +08:00
|
|
|
}
|
|
|
|
catch (Exception e)
|
2025-03-16 03:17:36 +08:00
|
|
|
{
|
|
|
|
Console.WriteLine($"Host[{Host}:{port}] error:{e.Message}");
|
|
|
|
}
|
2025-03-25 16:31:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
private async Task<bool> CheckConnectAsync()
|
|
|
|
{
|
|
|
|
byte[] arrMsg = [0xff];
|
|
|
|
try
|
|
|
|
{
|
|
|
|
await _socket.SendAsync(arrMsg); //发送字节数组
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2025-03-16 03:17:36 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
public async Task CloseAsync(CancellationToken token)
|
|
|
|
{
|
|
|
|
await _socket.DisconnectAsync(true, token);
|
|
|
|
_socket.Dispose();
|
|
|
|
}
|
|
|
|
|
|
|
|
public async Task SendContentAsync(string context)
|
|
|
|
{
|
2025-03-25 16:31:41 +08:00
|
|
|
if (!await CheckConnectAsync())
|
|
|
|
{
|
|
|
|
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
|
|
await ConnectAsync(CancellationToken.None);
|
|
|
|
}
|
|
|
|
|
2025-03-27 09:12:16 +08:00
|
|
|
await _socket.SendAsync(Encoding.ASCII.GetBytes(context));
|
2025-03-16 03:17:36 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
private const string CleanCmd = "#!A1#!CA#!P1";
|
|
|
|
private const string PrintCmd = "#!A1#!D#!P1";
|
|
|
|
|
|
|
|
public async Task CleanContextAsync()
|
|
|
|
{
|
2025-03-25 16:31:41 +08:00
|
|
|
if (!await CheckConnectAsync())
|
|
|
|
{
|
|
|
|
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
|
|
await ConnectAsync(CancellationToken.None);
|
|
|
|
}
|
|
|
|
|
2025-03-27 09:12:16 +08:00
|
|
|
await _socket.SendAsync(Encoding.ASCII.GetBytes(CleanCmd));
|
2025-03-16 03:17:36 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
public async Task PrintAsync()
|
|
|
|
{
|
2025-03-25 16:31:41 +08:00
|
|
|
if (!await CheckConnectAsync())
|
|
|
|
{
|
|
|
|
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
|
|
await ConnectAsync(CancellationToken.None);
|
|
|
|
}
|
|
|
|
|
2025-03-27 09:12:16 +08:00
|
|
|
await _socket.SendAsync(Encoding.ASCII.GetBytes(PrintCmd));
|
2025-03-16 03:17:36 +08:00
|
|
|
}
|
|
|
|
}
|