public TcpToSerialBridge(byte[] localHost, int port, SerialPortTransportClient transportClient, Action <string> logOutput) { LogOutput = logOutput; _transportClient = transportClient; var serialDataSource = (SerialPortDataSource)transportClient.DataSource; _comPortSource = serialDataSource.SourceName; _baudRate = (int)serialDataSource.BaudRate; var ipv4 = localHost != null ? new IPAddress(localHost) : GetLocalIPv4Address(); _tcpListener = new TcpListener(ipv4, port); if (LogOutput != null) { LogOutput(string.Format("Listening to {0}:{1}", ipv4.ToString(), port)); } byte[] addressBytes = ipv4.GetAddressBytes(); if (LogOutput != null) { LogOutput(string.Format("Registering listener: {0}.{1}.{2}.{3}:{4} for {5}@{6}", addressBytes[0], addressBytes[1], addressBytes[2], addressBytes[3], port, _comPortSource, _baudRate)); } _shouldListen = true; }
public void Start(string address, int portNo, SerialPortTransportClient transportClient, Action <string> logOutput, Action <Exception> handleError) { if (!_isRunning) { lock (_taskLocker) { if (!_isRunning) { IPAddress ipAddress; if (!IPAddress.TryParse(address, out ipAddress)) { throw new ArgumentException("address"); } if (portNo <= 0 || portNo > ushort.MaxValue) { throw new ArgumentException("portNo"); } _tasks[0] = new RunningTask(); _tasks[0].RunTaskForHandler(new TcpToSerialBridge(ipAddress.GetAddressBytes(), portNo, transportClient, logOutput), handleError); _isRunning = true; } } } }
public void Stop() { _shouldListen = false; _tcpListener.Stop(); if (_socketToSerial != null) { _socketToSerial.Stop(); } _transportClient = null; }
public SocketBinding(Socket socket, SerialPortTransportClient transportClient, Action <string> logOutput) { _socket = socket; _transportClient = transportClient; var serialDataSource = (SerialPortDataSource)transportClient.DataSource; _comPortSource = serialDataSource.SourceName; _baudRate = (int)serialDataSource.BaudRate; _transportClient.ReceiveDataCallback = OnDataChunkReceived; LogOutput = logOutput; }
public void Run() { int inBufferCount; try { while (true) { inBufferCount = _socket.Receive(_inBuffer); if (inBufferCount <= 0) { break; } var data = new byte[inBufferCount]; Array.Copy(_inBuffer, data, inBufferCount); _transportClient.WriteData(data); } } catch (Exception ex) { ex.Message._DLOG(); } finally { if (LogOutput != null) { LogOutput("Lost connection from: " + _socket.RemoteEndPoint + " for: " + _comPortSource + "@" + _baudRate); } try { _transportClient.ReceiveDataCallback = null; _transportClient = null; _socket.Close(); } catch { } } }