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()); } }
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); } }