private void OnConfig(IDiffSpread <string> spread)
        {
            if (!SkippedFirst)
            {
                // usually just the Default of the pin, any saved data will come next
                SkippedFirst = true;
                return;
                // default of the pin already mimmicks default Formular for this node
            }

            var formular = Formular;

            formular.Require(RequireEnum.None);

            if (FFormularSelection.IsAnyInvalid())
            {
                formular.Name = MessageFormular.DYNAMIC;
            }
            else
            {
                formular.Name = FFormularSelection[0].Name;
            }

            // overwrite fiels that occur in FConfig
            var config = new MessageFormular(MessageFormular.DYNAMIC, FConfig[0]);

            foreach (var field in config.FieldDescriptors)
            {
                formular[field.Name] = field;
            }

            Formular = formular;
        }
Exemplo n.º 2
0
#pragma warning restore

        public void Evaluate(int SpreadMax)
        {
            if (FInput.IsAnyInvalid() || FFilter.IsAnyInvalid())
            {
                SpreadMax = 0;
            }
            else
            {
                SpreadMax = FInput.SliceCount;
            }

            if (SpreadMax == 0)
            {
                FOutput.FlushNil();
                FNotFound.FlushNil();
                return;
            }

            if (!FInput.IsChanged && !FFilter.IsChanged)
            {
                return;
            }

            FOutput.SliceCount   = 0;
            FNotFound.SliceCount = 0;

            bool[] found = new bool[SpreadMax];
            for (int i = 0; i < SpreadMax; i++)
            {
                found[i] = false;
            }

            for (int i = 0; i < FFilter.SliceCount; i++)
            {
                string[] filter = FFilter[i].Split('.');
                var      regex  = FFilter[i].CreateWildCardRegex();

                for (int j = 0; j < SpreadMax; j++)
                {
                    if (!found[j])
                    {
                        found[j] = regex.IsMatch(FInput[j].Topic);
                    }
                }
            }

            for (int i = 0; i < SpreadMax; i++)
            {
                if (found[i])
                {
                    FOutput.Add(FInput[i]);
                }
                else
                {
                    FNotFound.Add(FInput[i]);
                }
            }
            FOutput.Flush();
            FNotFound.Flush();
        }
Exemplo n.º 3
0
#pragma warning restore

        public void Evaluate(int SpreadMax)
        {
            if ((!FInput.IsChanged && !FRemove.IsChanged))
            {
                return;
            }

            if ((FRemove.IsAnyInvalid() || FInput.IsAnyInvalid()))
            {
                if (FOutput.SliceCount > 0)
                {
                    FOutput.FlushResult(FInput);
                    return;
                }
                else
                {
                    return;
                }
            }

            SpreadMax          = FInput.SliceCount;
            FOutput.SliceCount = SpreadMax;

            for (int i = 0; i < SpreadMax; i++)
            {
                var remains = from msg in FInput[i]
                              where !FRemove.Contains(msg)
                              select msg;

                FOutput[0].SliceCount = 0;
                FOutput[0].AssignFrom(remains);
            }
            FOutput.Flush();
        }
Exemplo n.º 4
0
        #pragma warning restore

        public void Evaluate(int SpreadMax)
        {
            if (FInput.IsAnyInvalid())
            {
                SpreadMax = 0;
                if (FOutput.SliceCount != 0)
                {
                    FOutput.SliceCount = 0;
                    FOutput.Flush();
                }
                return;
            }
            else
            {
                SpreadMax = FInput.SliceCount;
            }

            if (!FInput.IsChanged && !FTopicAdd.IsChanged && !FContract.IsChanged)
            {
                return;
            }

            FOutput.SliceCount = 0;

            for (int i = 0; i < SpreadMax; i++)
            {
                Message message = OSCExtensions.FromOSC(FInput[i], FExtendedMode[0], FTopicAdd[0], FContract[0]);
                if (message != null)
                {
                    FOutput.Add(message);
                }
            }
            FOutput.Flush();
        }
#pragma warning restore

        public void Evaluate(int SpreadMax)
        {
            SpreadMax = FInput.IsAnyInvalid() ? 0 : FInput.SliceCount;

            if (SpreadMax <= 0)
            {
                FMatch.FlushNil();
                FOutput.FlushNil();

                return;
            }
            FMatch.SliceCount = FOutput.SliceCount = 0;

            foreach (var message in FInput)
            {
                var match = new bool[FFilter.SliceCount];
                for (int i = 0; i < FFilter.SliceCount; i++)
                {
                    match[i] = message.Fields.Contains(FFilter[i]);
                }

                if (match.Any())
                {
                    FOutput.Add(message);
                    FMatch.AddRange(match);
                }
            }

            FOutput.Flush();
            FMatch.Flush();
        }
        public void Evaluate(int SpreadMax)
        {
            if (!FInput.IsChanged && !FFilter.IsChanged)
            {
                return;
            }
            if (FInput.IsAnyInvalid())
            {
                if (FOutput.SliceCount > 0)
                {
                    FOutput.FlushNil();
                }
                return;
            }

            foreach (var message in FInput)
            {
                foreach (var fieldName in message.Fields.ToArray())
                {
                    if (FFilter.Contains(fieldName))
                    {
                        message.Remove(fieldName);
                    }
                }
            }

            FOutput.FlushResult(FInput);
        }
        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            // save some performance when no work necessary
            if (FInput.IsAnyInvalid())
            {
                if (FOutput.SliceCount > 0)
                {
                    FOutput.FlushNil();
                }
                return;
            }
            if (!FInput.IsChanged && !FFilter.IsChanged)
            {
                return;
            }

            // start working it out
            var result =
                from message in FInput
                let bin = message["MyField"] as Bin <string>                   // identify as string
                          where bin != null
                          where !bin.IsAnyInvalid() && !FFilter.IsAnyInvalid() // safe against nil
                          where FFilter.Contains(bin.First)
                          select message;

            // publish data back to vvvv
            FOutput.FlushResult(result);
        }
Exemplo n.º 8
0
        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            if (FInput.IsAnyInvalid() || FIndex.IsAnyInvalid())
            {
                if (FOutput.SliceCount > 0)
                {
                    FOutput.SliceCount = 0;
                    FOutput.Flush();
                }
                return;
            }

            if (!FInput.IsChanged && !FIndex.IsChanged)
            {
                return;
            }

            FOutput.SliceCount = 0;

            var search = from message in FInput
                         let track = (message["TrackId"] as Bin <int>).First
                                     where FIndex.Contains(track)
                                     select message;

            FOutput.AssignFrom(search);

            FOutput.Flush();
        }
Exemplo n.º 9
0
#pragma warning restore

        public void Evaluate(int SpreadMax)
        {
            if (FInput.IsAnyInvalid())
            {
                SpreadMax = 0;
            }
            else
            {
                SpreadMax = FInput.SliceCount;
            }

            if (SpreadMax == 0)
            {
                FOutput.FlushNil();
                return;
            }

            if (!FInput.IsChanged)
            {
                return;
            }

            var result = FInput.OrderBy(message => message.TimeStamp.UniversalTime);

            FOutput.FlushResult(result);
        }
Exemplo n.º 10
0
        public void Evaluate(int SpreadMax)
        {
            if (FInput.IsAnyInvalid())
            {
                if (FOutput.SliceCount > 0)
                {
                    FOutput.FlushNil();
                    return;
                }
                else
                {
                    return;
                }
            }

            if (FRemove.IsAnyInvalid())
            {
                FOutput.FlushResult(FInput);
                return;
            }

            if ((!FInput.IsChanged && !FRemove.IsChanged))
            {
                return;
            }

            var remains = from msg in FInput
                          where !FRemove.Contains(msg)
                          select msg;

            FOutput.FlushResult(remains);
        }
Exemplo n.º 11
0
#pragma warning restore

        public void Evaluate(int SpreadMax)
        {
            SpreadMax = FInput.IsAnyInvalid() ? 0 : FInput.SliceCount;

            if (SpreadMax <= 0)
            {
                FOutput.FlushNil();
                return;
            }

            var keepOnly = new HashSet <string>(FFilter);

            foreach (var message in FInput)
            {
                foreach (var fieldName in message.Fields.ToArray())
                {
                    if (!keepOnly.Contains(fieldName))
                    {
                        message.Remove(fieldName);
                    }
                }
            }

            if (FRemoveEmpty[0])
            {
                FOutput.FlushResult(FInput.Where(message => !message.IsEmpty));
            }
            else
            {
                FOutput.FlushResult(FInput);
            }
        }
Exemplo n.º 12
0
        #pragma warning restore

        public void Evaluate(int SpreadMax)
        {
            if (FInput.IsAnyInvalid() || FExtendedMode.IsAnyInvalid())
            {
                SpreadMax = 0;
            }
            else
            {
                SpreadMax = FInput.SliceCount;
            }

            if (SpreadMax == 0)
            {
                if (FOutput.SliceCount != 0)
                {
                    FOutput.SliceCount = 0;
                    FOutput.Flush();
                }
                return;
            }

            if (!FInput.IsChanged && !FExtendedMode.IsChanged)
            {
                return;
            }

            FOutput.SliceCount = SpreadMax;

            for (int i = 0; i < SpreadMax; i++)
            {
                FOutput[i].SliceCount = 0;

                MemoryStream ms = new MemoryComStream();
                FInput[i].Position = 0;
                FInput[i].CopyTo(ms);
                byte[] bytes = ms.ToArray();
                int    start = 0;

                OSCPacket packet = OSCPacket.Unpack(bytes, ref start, (int)FInput[i].Length, FExtendedMode[0]);

                if (packet.IsBundle())
                {
                    var packets = ((OSCBundle)packet).Values;
                    foreach (OSCPacket innerPacket in packets)
                    {
                        MemoryStream memoryStream = new MemoryStream(innerPacket.BinaryData);
                        FOutput[i].Add(memoryStream);
                    }
                }
                else
                {
                    MemoryStream memoryStream = new MemoryStream(packet.BinaryData);
                    FOutput[i].Add(memoryStream);
                }
            }
            FOutput.Flush();
        }
Exemplo n.º 13
0
        protected virtual bool CheckReset()
        {
            var anyChange = CheckRemove();

            if (!FReset.IsAnyInvalid() && FReset[0])
            {
                Keep.Clear();
                anyChange = true;
            }
            return(anyChange);
        }
Exemplo n.º 14
0
        public override void Evaluate(int SpreadMax)
        {
            if (FInput.IsAnyInvalid())
            {
                FOutput.FlushNil();
                return;
            }

            bool doFlush = false;

            // is any Update slice checked?
            var anyUpdate = FUpdate.Any();

            // Flush upstream changes through the plugin
            if (FInput.IsChanged)
            {
                FOutput.SliceCount = 0;
                FOutput.AssignFrom(FInput); // push change from upstream if valid
                doFlush = true;
            }
            else if (!anyUpdate)
            {
                return;                                                               // if no update and no change, no need to flush!
            }
            bool newData = FPins.Any(pinName => pinName.Value.ToISpread().IsChanged); // changed pins

            newData |= !FAutoSense[0];                                                // assume newData, if AutoSense is off.

            if (anyUpdate && newData)
            {
                int messageIndex = 0;
                foreach (var message in FInput)
                {
                    if (FUpdate[messageIndex])
                    {
                        doFlush |= CopyFromPins(message, messageIndex, FAutoSense[0]);
                    }

                    messageIndex++;
                }
            }

            if (doFlush)
            {
                FOutput.Flush();
            }


            if (RemovePinsFirst)
            {
                RetryConfig();
            }
        }
Exemplo n.º 15
0
        protected virtual bool CheckReset()
        {
            var anyChange = CheckRemove();

            if (!FReset.IsAnyInvalid() && FReset[0])
            {
                Keep.Clear();
                anyChange = true;

                FCountOut.FlushItem <int>(Keep.Count);
            }
            return(anyChange);
        }
Exemplo n.º 16
0
        protected virtual bool CheckRemove()
        {
            var anyChange = false;

            if (!FRemove.IsAnyInvalid())
            {
                foreach (var message in FRemove)
                {
                    anyChange |= Keep.Remove(message); // Remove will return false, if not in contained in Keep
                }
            }
            return(anyChange);
        }
Exemplo n.º 17
0
        private bool RemoveOldOrFlagged()
        {
            var validTime = Time.Time.CurrentTime() -
                            new TimeSpan(0, 0, 0, (int)Math.Floor(FTime[0]), (int)Math.Floor((FTime[0] * 1000) % 1000));

            if (FTime[0] > 0)
            {
                DeadMessages = DeadMessages.Concat(
                    from message in Keep.ToList()
                    where message.TimeStamp < validTime
                    let removed = Keep.Remove(message)
                                  select message
                    ).ToList();
            }


            if (!FKillField.IsAnyInvalid() && FKillField[0].Trim() != "")
            {
                var killField = FKillField[0].Trim();
                foreach (var message in Keep)
                {
                    if (!message.Contains(killField))
                    {
                        continue;
                    }

                    var killFlag = message[killField].First as bool?;

                    if (killFlag != null && killFlag == true)
                    {
                        Keep.Remove(message);
                        DeadMessages.Add(message);
                    }
                }
            }

            if (FRemovedMessages.SliceCount > 0 || DeadMessages.Count() > 0)
            {
                FRemovedMessages.SliceCount = 0;
                FRemovedMessages.AssignFrom(DeadMessages);
                FRemovedMessages.Flush();

                DeadMessages.Clear();
                return(true);
            }
            else
            {
                // output still empty, no need to flush
                return(false);
            }
        }
Exemplo n.º 18
0
        public void Evaluate(int SpreadMax)
        {
            if (FInput.IsAnyInvalid())
            {
                SpreadMax = 0;
            }
            else
            {
                SpreadMax = FInput.SliceCount;
            }

            if (SpreadMax == 0)
            {
                if (FOutput.SliceCount != 0)
                {
                    FOutput.FlushNil();
                    FEditCount.FlushNil();
                }
                return;
            }

            if (!FInput.IsChanged && !FModifier.IsChanged)
            {
                return;
            }

            FEditCount.SliceCount = SpreadMax;

            for (int i = 0; i < SpreadMax; i++)
            {
                FEditCount[i] = 0;
                var message = FInput[i];

                var targets =
                    from mod in FModifier
                    where mod != null
                    where mod.Topic == message.Topic
                    select mod;

                foreach (var mod in targets)
                {
                    message.InjectWith(mod, FDeepInspection[0]);
                    FEditCount[i]++;
                }
            }

            FOutput.FlushResult(FInput);
            FEditCount.Flush();
        }
Exemplo n.º 19
0
        public void Evaluate(int SpreadMax)
        {
            SpreadMax = FInput.IsAnyInvalid() ? 0 : FInput.SliceCount;
            if (!FInput.IsChanged && !FExtendedMode.IsChanged)
            {
                return;
            }

            FOutput.SliceCount = SpreadMax;

            for (int i = 0; i < SpreadMax; i++)
            {
                FOutput[i] = FInput[i].ToOSC(FExtendedMode[0]);
            }
            FOutput.Flush();
        }
Exemplo n.º 20
0
        public void Evaluate(int SpreadMax)
        {
            if (FInit[0])
            {
                FOutput.FlushNil();
                return;
            }

            _lastFrame.Clear();

            if (FInput.IsChanged && !FInput.IsAnyInvalid())
            {
                _lastFrame.AddRange(FInput);
                FOutput.FlushResult(_lastFrame);
            }
        }
        public void Evaluate(int SpreadMax)
        {
            if (FInput.IsChanged)
            {
                LastFrame.AssignFrom(FInput);
            }

            if (!FClear.IsAnyInvalid() && FClear[0])
            {
                FOutput.FlushNil();
            }
            else
            {
                FOutput.FlushResult(LastFrame);
            }
        }
Exemplo n.º 22
0
        protected void ConfigPin(IDiffSpread spread)
        {
            string typeAlias = "string";

            if (!FAlias.IsAnyInvalid())
            {
                typeAlias = FAlias[0].Name;
            }

            var newConfig = typeAlias + " Value";

            if (newConfig != FConfig[0])
            {
                FConfig[0] = newConfig;                          // first frame or user mistake will not reconfigure
            }
        }
Exemplo n.º 23
0
#pragma warning restore

        public void Evaluate(int SpreadMax)
        {
            var flow = FFlowControl[0];

            FChange.SliceCount = 0;

            switch (flow)
            {
            case FlowControlEnum.Block:
                FChange.AssignFrom(Enumerable.Repeat(false, 1));
                break;

            case FlowControlEnum.Default:
                if (FInput.IsChanged && !FInput.IsAnyInvalid())
                {
                    FOutput.FlushResult(FInput);
                    FChange.AssignFrom(Enumerable.Repeat(true, 1));
                }
                else
                {
                    FChange.AssignFrom(Enumerable.Repeat(false, 1));
                }
                break;

            case FlowControlEnum.Inspect:
                var change = FInput.Select(message => message.IsChanged);
                if (FInput.IsChanged || change.Any())
                {
                    FOutput.FlushResult(FInput);
                    FChange.AssignFrom(change);
                }
                else
                {
                    FChange.AssignFrom(Enumerable.Repeat(false, 1));
                }
                break;

            case FlowControlEnum.Force:
                FOutput.FlushResult(FInput);
                FChange.AssignFrom(Enumerable.Repeat(true, 1));
                break;

            default:
                FChange.AssignFrom(Enumerable.Repeat(false, 1));
                break;
            }
        }
Exemplo n.º 24
0
#pragma warning restore

        public void Evaluate(int SpreadMax)
        {
            SpreadMax = FInput.IsAnyInvalid() ? 0 : FInput.SliceCount;

            if (SpreadMax <= 0)
            {
                FOutput.FlushNil();
                return;
            }


            var translate = new Dictionary <string, string>();

            var max = FNew.CombineWith(FOld);

            for (int i = 0; i < max; i++)
            {
                var n = FNew[i].Trim();
                var o = FOld[i].Trim();

                if (string.IsNullOrWhiteSpace(n) || string.IsNullOrWhiteSpace(o) || !n.IsValidFieldName())
                {
                    throw new ParseFormularException("\"" + n + "\" is not a valid name for a Message's field. Only use alphanumerics, dots, hyphens and underscores. ");
                }

                translate[o] = n;
            }

            foreach (var message in FInput)
            {
                foreach (var fieldName in message.Fields.ToArray())
                {
                    if (translate.ContainsKey(fieldName))
                    {
                        var success = message.Rename(fieldName, translate[fieldName], FOverwrite[0]);

                        if (!success)
                        {
                            FLogger.Log(LogType.Error, "Cannot rename " + fieldName + " to " + translate[fieldName] + " because it already exists.");
                        }
                    }
                }
            }

            FOutput.FlushResult(FInput);
        }
Exemplo n.º 25
0
        public void Evaluate(int SpreadMax)
        {
            if (!FInput.IsChanged)
            {
                return;
            }

            SpreadMax = FInput.IsAnyInvalid() ? 0 : FInput.SliceCount;

            FOutput.SliceCount = SpreadMax;
//            FOutput.ResizeAndDispose(SpreadMax, () => new MemoryStream());

            for (int i = 0; i < SpreadMax; i++)
            {
                FOutput[i] = new MemoryComStream(); // null exception. wrong usage of resiseAndDispose maybe?
                serializer.Pack(FOutput[i], FInput[i]);
            }
            FOutput.Flush();
        }
Exemplo n.º 26
0
        //called when data for any output pin is requested
        public override void Evaluate(int SpreadMax)
        {
            if (!FInput.IsChanged)
            {
                return;
            }

            if (FInput.IsAnyInvalid())
            {
                FUnknown.FlushNil();

                FChanged.SliceCount = FKeep.SliceCount;
            }

            // inject all incoming messages and keep a list of all
            var idFields = from fieldName in FUseAsID
                           select fieldName.Name;

            var changed = (
                from message in FInput
                where message != null
                select MatchOrInsert(message, idFields)
                ).Distinct().ToList();


            SpreadMax           = FKeep.SliceCount;
            FChanged.SliceCount = FOutput.SliceCount = SpreadMax;


            for (int i = 0; i < SpreadMax; i++)
            {
                var message = FKeep[i];
                FOutput[i]  = message;
                FChanged[i] = changed.Contains(message);
            }

            if (changed.Any())
            {
                FOutput.Flush();
                FChanged.Flush();
            }
        }
Exemplo n.º 27
0
#pragma warning restore

        public override void Evaluate(int SpreadMax)
        {
            if (FInput.IsAnyInvalid())
            {
                SpreadMax = 0;
            }
            else
            {
                SpreadMax = FInput.SliceCount;
            }

            if (SpreadMax == 0)
            {
                FOutput.FlushNil();
                return;
            }

            if (!FInput.IsChanged && !FUseFields.IsChanged)
            {
                return;
            }

            FOutput.SliceCount = 0;

            var fieldNames = FUseFields[0];

            if (fieldNames.IsAnyInvalid())
            {
                FOutput.FlushResult(FInput);
            }
            else
            {
                var ordered = FInput.OrderBy(message => message[fieldNames[0].Name][0]);

                for (int i = 1; i < fieldNames.SliceCount; i++)
                {
                    ordered = ordered.ThenBy(message => message[fieldNames[i].Name][0]);
                }

                FOutput.FlushResult(ordered);
            }
        }
Exemplo n.º 28
0
        public override void Evaluate(int SpreadMax)
        {
            SpreadMax = FInput.IsAnyInvalid() ? 0 : FInput.SliceCount;
            if (!FInput.IsChanged && !FExtendedMode.IsChanged)
            {
                return;
            }

            FOutput.SliceCount = SpreadMax;


            for (int i = 0; i < SpreadMax; i++)
            {
                var fields = from fieldName in FUseFields[i]
                             select Formular[fieldName];

                FOutput[i] = FInput[i].ToOSC(fields, FExtendedMode[0]);
            }
            FOutput.Flush();
        }
Exemplo n.º 29
0
        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            if (FIndex.IsChanged)
            {
                Indices.Clear();
                foreach (var id in FIndex)
                {
                    int track = (int)id.x;
                    if (!Indices.ContainsKey(track))
                    {
                        Indices[track] = new HashSet <int>();
                    }
                    Indices[track].Add((int)id.y);
                }
            }

            if (FInput.IsAnyInvalid() || FIndex.IsAnyInvalid())
            {
                if (FOutput.SliceCount > 0)
                {
                    FOutput.SliceCount = 0;
                    FOutput.Flush();
                }
                return;
            }

            FOutput.SliceCount = 0;

            var search = from message in FInput
                         let track = (message["TrackId"] as Bin <int>).First
                                     where Indices.ContainsKey(track)
                                     let clip = (message["ClipId"] as Bin <int>).First
                                                where Indices[track].Contains(clip)
                                                select message;

            FOutput.AssignFrom(search);

            FOutput.Flush();
        }
Exemplo n.º 30
0
        public void Evaluate(int SpreadMax)
        {
            if (!FInput.IsChanged &&
                !FTopic.IsChanged &&
                !(FUpdate.IsChanged && FUpdate.Any())
                )
            {
                return;
            }

            SpreadMax = FInput.IsAnyInvalid() ? 0 : FInput.SliceCount;
            for (int i = 0; i < SpreadMax; i++)
            {
                // double check if topic change needs to occur, because setting it will mark the message as dirty
                if (FUpdate[i] && !FInput[i].Topic.Equals(FTopic[i]))
                {
                    FInput[i].Topic = FTopic[i];
                }
            }

            FOutput.FlushResult(FInput);
        }