public void Enqueue(RPositionsMessagePack rPosition) { if (record) { var positions = rPosition.NavigationData.SelectMany(r => r.Points.Select(p => new RPositionEvent(rPosition.Timestamp, r.Name, p.x, p.y, p.z, r.Trajectory.x, r.Trajectory.y, r.Trajectory.z))).ToList(); try { LockSlim.EnterWriteLock(); RPositionSamplesData.AddRange(positions); } catch (Exception e) { Logger.LogError(e, $"Error adding RPosition: {e.Message}"); } finally { LockSlim.ExitWriteLock(); } } }
public static RPositionsMessagePack Deserialize(byte[] data) { try { return(MessagePackSerializer.Deserialize <RPositionsMessagePack>(data)); } catch (Exception e) { string path = $@"RPosition_Error_{DateTime.Now.Ticks}.bin"; File.WriteAllBytes(path, data); var fallback = RPositionsOld.Deserialize(data); RPositionsMessagePack msg = new RPositionsMessagePack(); msg.Timestamp = fallback.Timestamp; msg.NavigationData = new List <NavigationData>(fallback.Data.Count); foreach (var rpos in fallback.Data) { msg.NavigationData.Add(new NavigationData { Name = rpos.Name, Points = rpos.Points.ToList() }); } return(msg); } }