private byte[] GetCommonData(MsulEmulationParametersViewModel ViewModel) { using (var ms = new MemoryStream()) { var writer = new BinaryWriter(ms); writer.Write((Byte)1); writer.Write((Byte)1); writer.Write((Byte)ViewModel.Carriages.Count); writer.Write((UInt32)(ViewModel.Time - _zeroTime).TotalSeconds); writer.Write((UInt16)ViewModel.TrainNumber); writer.Write((Byte)ViewModel.Speed); writer.Write(EncodeTemperature(ViewModel.OutdoorTemperature)); writer.Write((Int32)(ViewModel.Position.Longitude.Value / LatitudeFactor)); writer.Write((Int32)(ViewModel.Position.Latitude.Value / LatitudeFactor)); writer.Write((Int16)ViewModel.Altitude); writer.Write((Byte)10); writer.Write((Byte)((ViewModel.EmergencyStop ? 1 : 0) << 0 | (ViewModel.LeftDoorLocked ? 0 : 1) << 1 | (ViewModel.RightDoorLocked ? 0 : 1) << 2 | (ViewModel.LeftDoorOpened ? 1 : 0) << 3 | (ViewModel.RightDoorOpened ? 1 : 0) << 4 | (ViewModel.LightOn ? 1 : 0) << 5)); writer.Write((Byte)1); return ms.ToArray(); } }
public IObservable<MsulMessage> EmulationSource(MsulEmulationParametersViewModel EmulationParameters) { return EmulationParameters.Changed .Merge(EmulationParameters.Carriages.Select(cvm => cvm.Changed).Merge()) .Select(_ => _messageEncoder.GetMessage(EmulationParameters)) .StartWith(_messageEncoder.GetMessage(EmulationParameters)); }
public MsulMessage GetMessage(MsulEmulationParametersViewModel ViewModel) { return new MsulMessage(GetCommonData(ViewModel), ViewModel.Carriages.Select(GetCarriageData).ToList()); }