Esempio n. 1
0
        public void FullModeTopic()
        {
            var keep = new MessageKeep();

            keep.QuickMode = false;

            var message = new Message("Test");

            message.Sync();

            keep.Add(message);

            Assert.IsFalse(message.IsChanged);
            Assert.IsTrue(keep.IsChanged); // message was added

            keep.Sync();

            Assert.IsFalse(keep.IsChanged);

            message.Topic = "Refresh";

            Assert.IsTrue(message.IsChanged);
            Assert.IsTrue(keep.IsChanged);

            IEnumerable <int> changedIndices;
            var change = keep.Sync(out changedIndices);
            var diff   = change.First();

            Assert.IsFalse(message.IsChanged);
            Assert.IsFalse(keep.IsChanged);

            Assert.AreEqual(message.Topic, diff.Topic);
            Assert.IsTrue(diff.IsEmpty);
        }
Esempio n. 2
0
        public void QuickMode()
        {
            var keep = new MessageKeep();

            keep.QuickMode = true;

            var message = new Message("Test");

            List <Message> diffs = new List <Message>();

            message.ChangedWithDetails += (orig, diff) => { diffs.Add(diff); };

            keep.Add(message);
            message.Init("Field", 1, 2, 3);

            Assert.IsTrue(message.IsChanged);
            Assert.IsTrue(keep.IsChanged);
            Assert.AreEqual(0, diffs.Count);

            var change = keep.Sync();

            Assert.AreEqual(1, diffs.Count);
            Assert.AreEqual(message.Topic, diffs.First().Topic);

            Assert.IsFalse(message.IsChanged);
            Assert.IsFalse(keep.IsChanged);

            Assert.IsNull(change); // when in quickmode outputs null

            change = keep.Sync();
        }
Esempio n. 3
0
        public void FullModeInit()
        {
            var keep = new MessageKeep();

            keep.QuickMode = false;

            var message = new Message("Test");

            keep.Add(message);
            keep.Sync();

            Assert.IsFalse(message.IsChanged);
            Assert.IsFalse(keep.IsChanged);

            message.Init("Field", 1, 2, 3);

            Assert.IsTrue(message.IsChanged);
            Assert.IsTrue(keep.IsChanged);

            IEnumerable <int> changedIndices;
            var change = keep.Sync(out changedIndices);
            var diff   = change.First();

            Assert.IsFalse(message.IsChanged);
            Assert.IsFalse(keep.IsChanged);

            Assert.AreEqual(message.Topic, diff.Topic);
            Assert.AreEqual(message["Field"], diff["Field"]);
        }
Esempio n. 4
0
        public void FullModeTopic()
        {
            var keep = new MessageKeep();
            keep.QuickMode = false;

            var message = new Message("Test");
            message.Commit(this);

            keep.Add(message);

            Assert.IsFalse(message.IsChanged);
            Assert.IsTrue(keep.IsChanged); // message was added

            keep.Sync();

            Assert.IsFalse(keep.IsChanged);

            message.Topic = "Refresh";

            Assert.IsTrue(message.IsChanged);
            Assert.IsTrue(keep.IsChanged);

            IEnumerable<int> changedIndices;
            var change = keep.Sync(out changedIndices);
            var diff = change.First();

            Assert.IsFalse(message.IsChanged);
            Assert.IsFalse(keep.IsChanged);

            Assert.AreEqual(message.Topic, diff.Topic);
            Assert.IsTrue(diff.IsEmpty);
        }
Esempio n. 5
0
        public void FullModeRemove()
        {
            var keep = new MessageKeep();
            keep.QuickMode = false;

            var message = new Message("Test");
            message.Init("Field", 1, 2, 3);

            message.Commit(this);

            Assert.IsFalse(message.IsEmpty);

            keep.Add(message);

            Assert.IsFalse(message.IsChanged);
            Assert.IsTrue(keep.IsChanged); // message was added

            keep.Sync();

            message.Remove("Field");

            Assert.IsTrue(message.IsChanged);
            Assert.IsTrue(keep.IsChanged);

            IEnumerable<int> changedIndices;
            var change = keep.Sync(out changedIndices);
            var diff = change.First();

            Assert.IsFalse(message.IsChanged);
            Assert.IsFalse(keep.IsChanged);

            Assert.IsTrue(diff.IsEmpty);
        }
Esempio n. 6
0
        public void FullModeInit()
        {
            var keep = new MessageKeep();
            keep.QuickMode = false;

            var message = new Message("Test");
            keep.Add(message);
            keep.Sync();

            Assert.IsFalse(message.IsChanged);
            Assert.IsFalse(keep.IsChanged);

            message.Init("Field", 1, 2, 3);

            Assert.IsTrue(message.IsChanged);
            Assert.IsTrue(keep.IsChanged);

            IEnumerable<int> changedIndices;
            var change = keep.Sync(out changedIndices);
            var diff = change.First();

            Assert.IsFalse(message.IsChanged);
            Assert.IsFalse(keep.IsChanged);

            Assert.AreEqual(message.Topic, diff.Topic);
            Assert.AreEqual(message["Field"], diff["Field"]);
        }
Esempio n. 7
0
        public void FullModeRemove()
        {
            var keep = new MessageKeep();

            keep.QuickMode = false;

            var message = new Message("Test");

            message.Init("Field", 1, 2, 3);


            message.Sync();

            Assert.IsFalse(message.IsEmpty);

            keep.Add(message);

            Assert.IsFalse(message.IsChanged);
            Assert.IsTrue(keep.IsChanged); // message was added

            keep.Sync();

            message.Remove("Field");

            Assert.IsTrue(message.IsChanged);
            Assert.IsTrue(keep.IsChanged);

            IEnumerable <int> changedIndices;
            var change = keep.Sync(out changedIndices);
            var diff   = change.First();

            Assert.IsFalse(message.IsChanged);
            Assert.IsFalse(keep.IsChanged);

            Assert.IsTrue(diff.IsEmpty);
        }
Esempio n. 8
0
        public override void Evaluate(int SpreadMax)
        {
            if (RemovePinsFirst)
            {
                RetryConfig();
            }

            SpreadMax = FSpreadCount.IsAnyInvalid() || FTopic.IsAnyInvalid() ? 0 : FSpreadCount[0];
            SpreadMax = Math.Max(SpreadMax, 0); // safeguard against negative binsizes

//          Reset?
            var anyUpdate = ResetNecessary;

            var forceUpdate = !FAutoSense[0] || FAutoSense.IsChanged;

            var newData = FPins.Any(x => x.Value.ToISpread().IsChanged); // changed pins

            newData |= forceUpdate;                                      // if update is forced, then predent it is new Data

            var newTopic = FTopic.IsChanged;

            newTopic |= forceUpdate; // if update is forced, then pretend it is a new Topic

//          remove superfluous entries
            if (SpreadMax < Keep.Count)
            {
                anyUpdate = true;
                Keep.RemoveRange(SpreadMax, Keep.Count - SpreadMax);
            }

//          add new entries
            for (int i = Keep.Count; i < SpreadMax; i++)
            {
                anyUpdate = true; // new entry in Keep will require data

                newData  = true;
                newTopic = true;

                var message = new Message(Formular);
                message.Topic = FTopic[i];
                Keep.Add(message);
            }

//          check update pin
            anyUpdate |= FUpdate.Any();

            if (anyUpdate && (newData || newTopic))
            {
                // ...and start filling messages
                int messageIndex = 0;
                foreach (var message in Keep)
                {
                    // only copy, when Update is true for this message
                    if (newData && FUpdate[messageIndex] && CopyFromPins(message, messageIndex, !forceUpdate))
                    {
                        anyUpdate = true;
                    }

                    if (newTopic && FUpdate[messageIndex] && message.Topic != FTopic[messageIndex])
                    {
                        message.Topic = FTopic[messageIndex];
                        anyUpdate     = true;
                    }
                    messageIndex++;
                }
            }

            if (Keep.IsChanged)
            {
                UpKeep(anyUpdate);
            }
            else  // no change, so make sure, none is reported
            {
                if (FChangeOut.SliceCount > 0)
                {
                    FChangeOut.SliceCount      = 0;
                    FChangeIndexOut.SliceCount = 0;
                }
            }
        }
Esempio n. 9
0
        public void QuickMode()
        {
            var keep = new MessageKeep();
            keep.QuickMode = true;

            var message = new Message("Test");

            List<Message> diffs = new List<Message>();
            message.ChangedWithDetails += (orig, diff) => { diffs.Add(diff); } ;

            keep.Add(message);
            message.Init("Field", 1, 2, 3);

            Assert.IsTrue(message.IsChanged);
            Assert.IsTrue(keep.IsChanged);
            Assert.AreEqual(0, diffs.Count);

            var change = keep.Sync();

            Assert.AreEqual(1, diffs.Count);
            Assert.AreEqual(message.Topic, diffs.First().Topic);

            Assert.IsFalse(message.IsChanged);
            Assert.IsFalse(keep.IsChanged);

            Assert.IsNull(change); // when in quickmode outputs null

            change = keep.Sync();
        }
        public override void Evaluate(int SpreadMax)
        {
            InitDX11Graph();

            bool warnPinSafety = false;

            if (RemovePinsFirst)
            {
                warnPinSafety = !RetryConfig();                  // defer PinConnectionException until end of method, if not successful
            }
            SpreadMax = FSpreadCount.IsAnyInvalid() || FTopic.IsAnyInvalid() ? 0 : FSpreadCount[0];
            SpreadMax = Math.Max(SpreadMax, 0); // safeguard against negative binsizes

//          Reset?
            var anyUpdate   = FResetNecessary;
            var forceUpdate = FForce[0] || FForce.IsChanged;

            var newData = FPins.Any(x => x.Value.ToISpread().IsChanged); // changed pins

            newData |= forceUpdate;                                      // if update is forced, then predent it is new Data
            var newTopic = FTopic.IsChanged;

            newTopic |= forceUpdate; // if update is forced, then pretend it is a new Topic

//          remove superfluous entries
            if (SpreadMax < Keep.Count)
            {
                anyUpdate = true;
                Keep.RemoveRange(SpreadMax, Keep.Count - SpreadMax);
            }

//          add new entries
            for (int i = Keep.Count; i < SpreadMax; i++)
            {
                anyUpdate = true; // new entry in Keep will require data

                newData  = true;
                newTopic = true;

                var message = new Message(Formular);
                message.Topic = FTopic[i];
                Keep.Add(message);
            }

//          check update pin
            anyUpdate |= FUpdate.Any();

            if (anyUpdate && (newData || newTopic))
            {
                // ...and start filling messages
                int messageIndex = 0;
                foreach (var message in Keep)
                {
                    // only copy, when Update is true for this message
                    if (newData && FUpdate[messageIndex] && CopyFromPins(message, messageIndex, !forceUpdate))
                    {
                        anyUpdate = true;
                    }

                    if (newTopic && FUpdate[messageIndex] && message.Topic != FTopic[messageIndex])
                    {
                        message.Topic = FTopic[messageIndex];
                        anyUpdate     = true;
                    }
                    messageIndex++;
                }
            }

            if (Keep.IsChanged || Keep.Any(m => m.HasRecentCommit(Keep)))
            {
                UpKeep(anyUpdate);
            }
            else  // no change, so make sure, none is reported
            {
                if (FChangeOut.SliceCount > 0)
                {
                    FChangeOut.FlushNil();
                    FChangeIndexOut.FlushNil();
                }
            }

            if (warnPinSafety)
            {
                throw new PinConnectionException("Manually remove unneeded links first! [ConfigKeep]. ID = [" + PluginHost.GetNodePath(false) + "]");
            }
        }