2025-03-27 09:12:16 +08:00

79 lines
2.1 KiB
C#

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;
private Socket _socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public async Task ConnectAsync(CancellationToken token)
{
try
{
await _socket.ConnectAsync(Host, Convert.ToInt32(port), token);
}
catch (Exception e)
{
Console.WriteLine($"Host[{Host}:{port}] error:{e.Message}");
}
}
private async Task<bool> CheckConnectAsync()
{
byte[] arrMsg = [0xff];
try
{
await _socket.SendAsync(arrMsg); //发送字节数组
return true;
}
catch
{
return false;
}
}
public async Task CloseAsync(CancellationToken token)
{
await _socket.DisconnectAsync(true, token);
_socket.Dispose();
}
public async Task SendContentAsync(string context)
{
if (!await CheckConnectAsync())
{
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
await ConnectAsync(CancellationToken.None);
}
await _socket.SendAsync(Encoding.ASCII.GetBytes(context));
}
private const string CleanCmd = "#!A1#!CA#!P1";
private const string PrintCmd = "#!A1#!D#!P1";
public async Task CleanContextAsync()
{
if (!await CheckConnectAsync())
{
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
await ConnectAsync(CancellationToken.None);
}
await _socket.SendAsync(Encoding.ASCII.GetBytes(CleanCmd));
}
public async Task PrintAsync()
{
if (!await CheckConnectAsync())
{
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
await ConnectAsync(CancellationToken.None);
}
await _socket.SendAsync(Encoding.ASCII.GetBytes(PrintCmd));
}
}