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