Пример #1
0
        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;
        }
Пример #2
0
        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;
                    }
                }
            }
        }
Пример #3
0
 public void Stop()
 {
     _shouldListen = false;
     _tcpListener.Stop();
     if (_socketToSerial != null)
     {
         _socketToSerial.Stop();
     }
     _transportClient = null;
 }
Пример #4
0
        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;
        }
Пример #5
0
        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
                {
                }
            }
        }