Ejemplo n.º 1
0
 public void QueueVesselProto(Guid vesselID, double planetTime, ConfigNode vesselNode)
 {
     if (vesselNode != null)
     {
         lock (updateQueueLock)
         {
             if (!vesselProtoQueue.ContainsKey(vesselID))
             {
                 vesselProtoQueue.Add(vesselID, new Queue<VesselProtoUpdate>());
             }
             Queue<VesselProtoUpdate> vpuQueue = vesselProtoQueue[vesselID];
             if (vesselProtoHistoryTime.ContainsKey(vesselID))
             {
                 //If we get an update older than the current queue peek, then someone has gone back in time and the timeline needs to be fixed.
                 if (planetTime < vesselProtoHistoryTime[vesselID])
                 {
                     DarkLog.Debug("Vessel " + vesselID + " went back in time - rewriting the proto update history for it.");
                     Queue<VesselProtoUpdate> newQueue = new Queue<VesselProtoUpdate>();
                     while (vpuQueue.Count > 0)
                     {
                         VesselProtoUpdate oldVpu = vpuQueue.Dequeue();
                         //Save the updates from before the revert
                         if (oldVpu.planetTime < planetTime)
                         {
                             newQueue.Enqueue(oldVpu);
                         }
                     }
                     vpuQueue = newQueue;
                     vesselProtoQueue[vesselID] = newQueue;
                     //Clean the history too
                     if (Settings.fetch.revertEnabled)
                     {
                         if (vesselProtoHistory.ContainsKey(vesselID))
                         {
                             List<VesselProtoUpdate> vpuh = vesselProtoHistory[vesselID];
                             foreach (VesselProtoUpdate oldVpu in vpuh.ToArray())
                             {
                                 if (oldVpu.planetTime > planetTime)
                                 {
                                     vpuh.Remove(oldVpu);
                                 }
                             }
                         }
                     }
                 }
             }
             //Create new VPU to be stored.
             VesselProtoUpdate vpu = new VesselProtoUpdate();
             vpu.vesselID = vesselID;
             vpu.planetTime = planetTime;
             vpu.vesselNode = vesselNode;
             vpuQueue.Enqueue(vpu);
             //Revert support
             if (Settings.fetch.revertEnabled)
             {
                 if (!vesselProtoHistory.ContainsKey(vesselID))
                 {
                     vesselProtoHistory.Add(vesselID, new List<VesselProtoUpdate>());
                 }
                 vesselProtoHistory[vesselID].Add(vpu);
             }
             vesselProtoHistoryTime[vesselID] = planetTime;
         }
     }
     else
     {
         DarkLog.Debug("Refusing to queue proto for " + vesselID + ", it has a null config node");
     }
 }
Ejemplo n.º 2
0
 public void QueueVesselProto(string vesselID, double planetTime, ConfigNode vesselNode)
 {
     if (vesselNode != null)
     {
         lock (updateQueueLock)
         {
             if (!vesselProtoQueue.ContainsKey(vesselID))
             {
                 vesselProtoQueue.Add(vesselID, new Queue<VesselProtoUpdate>());
             }
             VesselProtoUpdate vpu = new VesselProtoUpdate();
             vpu.planetTime = planetTime;
             vpu.vesselNode = vesselNode;
             vesselProtoQueue[vesselID].Enqueue(vpu);
         }
     }
     else
     {
         DarkLog.Debug("Refusing to queue proto for " + vesselID + ", it has a null config node");
     }
 }
Ejemplo n.º 3
0
 public void QueueVesselProto(int subspace, double planetTime, ConfigNode vesselNode)
 {
     if (!vesselProtoQueue.ContainsKey(subspace))
     {
         SetupSubspace(subspace);
     }
     VesselProtoUpdate vpu = new VesselProtoUpdate();
     vpu.planetTime = planetTime;
     vpu.vesselNode = vesselNode;
     vesselProtoQueue[subspace].Enqueue(vpu);
 }