Ejemplo n.º 1
0
        public void it_builds_a_DataFrame_parsing_string()
        {
            var text      = @"Data Value, Data Label
12, twelve
11, eleven";
            var dataFrame = DataFrameParser.Parse(text);

            dataFrame[0, 0].Should().Be(12);
        }
        private void ProcessData()
        {
            while (receivedData.Count >= 256)
            {
                // skip to byte that indicates the start of a data frame
                bool lookingForFrame = true;
                while (lookingForFrame && receivedData.Count >= 128)
                {
                    var nextByte      = receivedData.Dequeue();
                    var followingByte = receivedData.Peek();
                    if (nextByte == DataFrameParser.MessageEnd && followingByte == DataFrameParser.MessageStart)
                    {
                        lookingForFrame = false;
                        break;
                    }
                }

                if (lookingForFrame)
                {
                    continue;
                }

                byte messageStart = receivedData.Dequeue();
                byte messageSize  = receivedData.Dequeue();
                char messageType  = (char)receivedData.Dequeue();

                if (messageSize < 4)
                {
                    continue;
                }

                // message size minus four reserved bytes
                byte[] data = new byte[messageSize - 4];
                for (int i = 0; i < data.Length; i++)
                {
                    data[i] = receivedData.Dequeue();
                }

                byte messageEnd = receivedData.Dequeue();

                if (messageType == CommandType.Status)
                {
                    StatusFrameReceived?.Invoke(DataFrameParser.ParseStatusFrame(data));
                }
                else
                {
                    DataFrameReceived?.Invoke(DataFrameParser.ParseDateFrame(data, messageType));
                }
            }
        }