Files
point_of_sale/PointOfSale/Utilities/ESCPOS_NET/Utils/TCPConnection.cs
Bjarne Pedersen 41e23b6184 Initial commit
Initial commit til Git.
V2 er deployed
2026-06-13 17:31:50 +02:00

60 lines
2.2 KiB
C#

using ESCPOS_NET.Utils;
using SimpleTcp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace ESCPOS_NET
{
public class TCPConnection
{
public Stream ReadStream { get; private set; } = new EchoStream();
public Stream WriteStream { get; private set; }
public event EventHandler<ClientConnectedEventArgs> Connected;
public event EventHandler<ClientDisconnectedEventArgs> Disconnected;
public bool IsConnected => _client?.IsConnected ?? false;
private SimpleTcpClient _client;
//public event EventHandler<DataReceivedEventArgs> DataReceived;
public TCPConnection(string destination)
{
_client = new SimpleTcpClient(destination);
_client.Events.Connected += ConnectedEventHandler;
_client.Events.Disconnected += DisconnectedEventHandler;
_client.Events.DataReceived += DataReceivedEventHandler;
_client.Keepalive = new SimpleTcpKeepaliveSettings() { EnableTcpKeepAlives = true, TcpKeepAliveInterval = 1, TcpKeepAliveTime = 1, TcpKeepAliveRetryCount = 3 };
ReadStream.ReadTimeout = 1500;
WriteStream = new InterceptableWriteMemoryStream(bytes => _client.Send(bytes));
}
private void ConnectedEventHandler(object sender, ClientConnectedEventArgs e)
{
Connected?.Invoke(sender, e);
}
private void DisconnectedEventHandler(object sender, ClientDisconnectedEventArgs e)
{
Disconnected?.Invoke(sender, e);
}
private void DataReceivedEventHandler(object sender, DataReceivedEventArgs e)
{
ReadStream.Write(e.Data, 0, e.Data.Length);
}
public void ConnectWithRetries(int timeoutMs)
{
_client.ConnectWithRetries(timeoutMs);
}
~TCPConnection()
{
try
{
_client.Events.DataReceived -= DataReceivedEventHandler;
_client.Events.Connected -= ConnectedEventHandler;
_client.Events.Disconnected -= DisconnectedEventHandler;
_client?.Dispose();
}
catch { }
}
}
}