using System; using System.Collections.Generic; using System.Diagnostics; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ModbusDemo.Device { public class SerialPortAdapter:IStreamResource { private string NewLine = Environment.NewLine; private SerialPort _serialPort; public SerialPortAdapter(SerialPort serialPort) { Debug.Assert(serialPort != null, "Argument serialPort cannot be null."); _serialPort = serialPort; _serialPort.NewLine = NewLine; } public int InfiniteTimeout { get { return SerialPort.InfiniteTimeout; } } public int ReadTimeout { get { return _serialPort.ReadTimeout; } set { _serialPort.ReadTimeout = value; } } public int WriteTimeout { get { return _serialPort.WriteTimeout; } set { _serialPort.WriteTimeout = value; } } public void DiscardInBuffer() { _serialPort.DiscardInBuffer(); } public int Read(byte[] buffer, int offset, int count) { return _serialPort.Read(buffer, offset, count); } public void Write(byte[] buffer, int offset, int count) { _serialPort.Write(buffer, offset, count); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { _serialPort?.Dispose(); _serialPort = null; } } } }