Example #1
0
        public void EndGeneration(int endedGeneration)
        {
            var current = incomingMessages;

            if (current.Generation > endedGeneration)
            {
                return;
            }
            lock (this)
            {
                Log.Message("Inserting message generation " + current.Generation + "->" + (endedGeneration + 1));
                //if (!generations.IsEmpty && !generations.ContainsKey(current.Generation - 1))
                //throw new IntegrityViolation("Trying to insert generation " + current.Generation + ", but generation " + (current.Generation - 1) + " does not locally exist");

                if (generations.TryAdd(current.Generation, current))
                {
                    DB.PutNow(new SerialCCS(new SDS.ID(Simulation.ID.XYZ, current.Generation), current.Export(true)), true);
                }
                for (int i = current.Generation + 1; i <= endedGeneration; i++)
                {
                    Log.Message("Skipping empty message generation " + i);
                    var m = new IncomingMessages(i, MessagePack.CompleteBlank);
                    generations.TryAdd(i, m);
                    DB.PutNow(new SerialCCS(new SDS.ID(Simulation.ID.XYZ, i), m.Export(true)), true);
                }
                incomingMessages = new IncomingMessages(endedGeneration + 1);
            }
        }