Пример #1
0
        protected void OnRawLineReceived(string line)
        {
            RawLineEventArgs e = new RawLineEventArgs(line);

            if (RawLineReceived != null)
            {
                RawLineReceived.Invoke(this, e);
            }
        }
Пример #2
0
        private void ThreadReaderProc()
        {
            try
            {
                while (true)
                {
                    int b = _port.ReadByte();
                    if (b != -1)
                    {
                        RawByteReceived?.Invoke(this, (byte)b);

                        if (b == 0x0d)
                        {
                            _0dRecv = true;
                        }
                        else if (b == 0x0a)
                        {
                            if (_0dRecv)
                            {
                                // строка
                                var s = GetStringFromBuffer();
                                RawLineReceived?.Invoke(this, s);
                                LineReceived?.Invoke(this, new LineReceivedEventArgs()
                                {
                                    Line = s, Type = LineReceivedEventArgs.LineType.General
                                });
                                _0dRecv = false;
                                _buffer.Clear();
                            }
                        }
                        else
                        {
                            _buffer.Add((byte)b);
                            if (_buffer.Count == 2 && _buffer[0] == 0x3e && _buffer[1] == 0x20)
                            {
                                // приглашение >
                                LineReceived?.Invoke(this, new LineReceivedEventArgs()
                                {
                                    Line = "> ", Type = LineReceivedEventArgs.LineType.Ask
                                });
                                _0dRecv = false;
                                _buffer.Clear();
                            }
                            else if (_buffer.Count == 3 && _buffer[0] == 0x3e && _buffer[1] == 0x3e && _buffer[2] == 0x20)
                            {
                                // приглашение >>
                                LineReceived?.Invoke(this, new LineReceivedEventArgs()
                                {
                                    Line = ">> ", Type = LineReceivedEventArgs.LineType.DoubleAsk
                                });
                                _0dRecv = false;
                                _buffer.Clear();
                            }
                        }
                    }
                }
            }
            catch //(Exception ex)
            {
                //...
            }
            finally
            {
                try { _port.Dispose(); } catch { }
            }
        }