Ejemplo n.º 1
0
        public void SendMeasurements(IEnumerable <IMeasurement> measurements)
        {
            using (MemoryStream stream = new MemoryStream())
                using (BinaryWriter writer = new BinaryWriter(stream))
                {
                    writer.Write(BigEndian.GetBytes(measurements.Count()));

                    foreach (IMeasurement measurement in measurements)
                    {
                        ECAMeasurement ecaMeasurement = new ECAMeasurement()
                        {
                            SignalID   = measurement.ID,
                            Timestamp  = measurement.Timestamp,
                            Value      = measurement.Value,
                            StateFlags = measurement.StateFlags
                        };

                        writer.Write(ecaMeasurement.SignalID.ToRfcBytes());
                        writer.Write(BigEndian.GetBytes(ecaMeasurement.Timestamp.Ticks));
                        writer.Write(BigEndian.GetBytes(ecaMeasurement.Value));
                        writer.Write(BigEndian.GetBytes((uint)ecaMeasurement.StateFlags));
                    }

                    m_dataSubscriber.SendServerCommand((ServerCommand)ECAServerCommand.SendMeasurements, stream.ToArray());
                }
        }
Ejemplo n.º 2
0
        private void HandleDataPacketCommand(ClientConnection connection, byte[] buffer, int startIndex, int length)
        {
            try
            {
                List <IMeasurement> measurements = new List <IMeasurement>();

                int index             = startIndex;
                int payloadByteLength = BigEndian.ToInt32(buffer, index);
                index += sizeof(int);

                string dataString = connection.Encoding.GetString(buffer, index, payloadByteLength);
                ConnectionStringParser <SettingAttribute> connectionStringParser = new ConnectionStringParser <SettingAttribute>();

                foreach (string measurementString in dataString.ParseKeyValuePairs().Values)
                {
                    ECAMeasurement measurement = new ECAMeasurement();
                    connectionStringParser.ParseConnectionString(measurementString, measurement);

                    measurements.Add(new Measurement()
                    {
                        Metadata   = MeasurementKey.LookUpBySignalID(measurement.SignalID).Metadata,
                        Timestamp  = measurement.Timestamp,
                        Value      = measurement.Value,
                        StateFlags = measurement.StateFlags
                    });
                }

                OnNewMeasurements(measurements);
            }
            catch (Exception ex)
            {
                string errorMessage = $"Data packet command failed due to exception: {ex.Message}";
                OnProcessException(new Exception(errorMessage, ex));
                SendClientResponse(connection.ClientID, ServerResponse.Failed, (ServerCommand)ECAServerCommand.StatusMessage, errorMessage);
            }
        }