Пример #1
0
 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();
         }
     }
 }
Пример #2
0
 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);
     }
 }