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