Ejemplo n.º 1
0
        private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            List <byte> bytesReceived = new List <byte>();

            while (this.SerialPort.BytesToRead > 0 && this.SerialPort.IsOpen && !isDelimiter)
            {
                try
                {
                    int count = this.SerialPort.BytesToRead;
                    if (this.SerialPort.BytesToRead > this.SerialPort.ReadBufferSize)
                    {
                        count = this.SerialPort.ReadBufferSize;
                    }
                    byte[] message = new byte[count];
                    this.SerialPort.Read(message, 0, count);
                    bytesReceived.AddRange(message);
                }
                catch (Exception ex)
                {
                    ExceptionThrown?.Invoke(this, ex);
                }
            }
            if (isDelimiter && this.SerialPort.IsOpen)
            {
                try
                {
                    string message2 = this.SerialPort.ReadTo(this.Delimiter.ToString());
                    bytesReceived.AddRange(System.Text.Encoding.Default.GetBytes(message2));
                }
                catch (Exception ex)
                {
                    ExceptionThrown?.Invoke(this, ex);
                }
            }

            if (bytesReceived.Count > 0)
            {
                DataReceived?.Invoke(sender, new ByteData(bytesReceived.ToArray(), this.SerialPort.Encoding));
            }
            List <byte> bytelist = new List <byte>();

            foreach (var item in bytesReceived)
            {
                if (item == BitConverter.GetBytes(this.Delimiter)[0])
                {
                    DelimiterDataReceived?.Invoke(sender, new ByteData(bytelist.ToArray(), this.SerialPort.Encoding));
                    bytelist.Clear();
                }
                else
                {
                    bytelist.Add(item);
                }
            }
        }
Ejemplo n.º 2
0
        private void OnDelimiterMessageReceived(TcpClient client, byte[] msg)
        {
            var e = new Message(msg, client, StringEncoder, ReceiveDelimiter, AutoTrimStrings);

            DelimiterDataReceived?.Invoke(this, e);
        }