コード例 #1
0
ファイル: ZToolPacketParser.cs プロジェクト: lulzzz/ZigbeeNet
        /**
         * Run method executed by the parser thread.
         */
        public void Run()
        {
            _logger.Trace("ZToolPacketParser parserThread started");
            while (!_cancellationToken.IsCancellationRequested)
            {
                try
                {
                    byte?val = _port.Read();
                    if (val == ZToolPacket.START_BYTE)
                    {
                        // inputStream.mark(256);
                        ZToolPacketStream packetStream = new ZToolPacketStream(_port);
                        ZToolPacket       response     = packetStream.ParsePacket();

                        _logger.Trace("Response is {Type} -> {Response}", response.GetType().Name, response);
                        if (response.Error)
                        {
                            _logger.Debug("Received a BAD PACKET {Response}", response.ToString());
                            // inputStream.reset();
                            continue;
                        }

                        _packetHandler.HandlePacket(response);
                    }
                    else if (val != null)
                    {
                        // Log if not end of stream.
                        _logger.Debug("Discarded stream: expected start byte but received {Value}", val);
                    }
                }
                catch (IOException e)
                {
                    if (!_cancellationToken.IsCancellationRequested)
                    {
                        _packetHandler.Error(e);
                        _cancellationToken.Cancel();
                    }
                }
            }
            _logger.Debug("ZToolPacketParser parserThread exited.");
        }