Esempio n. 1
0
        private async Task OperateLoop()
        {
            while (true)
            {
                await Inlets.AnyMessageAvailableAsync();

                try
                {
                    NodeDisposedToken.ThrowIfCancellationRequested();
                    var inletsBefore = Inlets.GetSnapshot();
                    await Operate();

                    _operationsCount++;
                    var inletsAfter = Inlets.GetSnapshot();
                    if (!Equals(inletsBefore, inletsAfter))
                    {
                    }
                }
                catch (OperationCanceledException ex) when(ex.CancellationToken == NodeDisposedToken)
                {
                    break;
                }
                catch (Exception ex)
                {
                    _exceptionsCount++;
                    Exception.Send(ex);
                }
            }
        }
Esempio n. 2
0
        public NuGetListPackagesNode(Workspace workspace) : base(workspace)
        {
            Settings = Inlets.Create <ISettings>(nameof(Settings));
            Repo     = Outlets.Create <string>(nameof(Repo));

            Settings.OnNext(NuGet.Configuration.Settings.LoadDefaultSettings("."));
        }
Esempio n. 3
0
        private void RebuildScript()
        {
            var options = ScriptOptions.Default
                          .AddReferences(
                typeof(DynamicObject).GetTypeInfo().Assembly,
                typeof(CSharpArgumentInfo).GetTypeInfo().Assembly,
                typeof(ExpandoObject).GetTypeInfo().Assembly)
                          .AddImports(typeof(Math).Namespace);

            var usedVars     = new HashSet <string>();
            var removeUnused = false;

            foreach (var diagnostic in CSharpScript.Create(_latestExpression, options).Compile())
            {
                if (diagnostic.Id == "CS0103")
                {
                    var missedVariable = diagnostic.Location.SourceTree.GetCompilationUnitRoot().FindToken(diagnostic.Location.SourceSpan.Start).Text;
                    usedVars.Add(missedVariable);
                    removeUnused = true;
                }
            }

            var unusedVars = new HashSet <string>(_variables.Keys);

            unusedVars.ExceptWith(usedVars);

            var sb = new StringBuilder();

            foreach (var variableName in usedVars)
            {
                if (!_variables.TryGetValue(variableName, out Inlet inlet))
                {
                    inlet = Inlets.Create("var" + Interlocked.Increment(ref _counter));
                    ((IObserver <object>)inlet).OnNext(null);
                    _variables.Add(variableName, inlet);
                    inlet.SetAttribute("title", variableName);
                    inlet.SetAttribute("is-title-editable", "true");
                }

                sb.AppendLine($"dynamic {variableName} = (dynamic)__globals__[\"{variableName}\"];");
            }

            if (removeUnused)
            {
                foreach (var variableName in unusedVars)
                {
                    Inlets.Destroy(_variables[variableName]);
                    _variables.Remove(variableName);
                }
            }

            var script = CSharpScript
                         .Create(sb.ToString(), options, typeof(Globals))
                         .ContinueWith(_latestExpression);

            script.Compile();
            _script = script;
        }
Esempio n. 4
0
        protected override async Task Operate()
        {
            var currentIsEnabled = false;
            var currentInterval  = default(TimeSpan);
            var stopwatch        = Stopwatch.StartNew();
            var counter          = 0;
            var ticksElapsed     = 0;

            while (true)
            {
                var newIsEnabled     = await IsEnabled;
                var newInterval      = await Interval;
                var useLocalTimeZone = await UseLocalTimeZone;

                var shouldPost = true;
                if (currentIsEnabled != newIsEnabled || currentInterval != newInterval)
                {
                    shouldPost       = false;
                    stopwatch        = Stopwatch.StartNew();
                    ticksElapsed     = 0;
                    currentIsEnabled = newIsEnabled;
                    currentInterval  = newInterval;
                    if (!currentIsEnabled || currentInterval.TotalMilliseconds <= 0)
                    {
                        break;
                    }
                }

                if (shouldPost)
                {
                    ticksElapsed++;
                    counter++;
                    Counter.Send(counter);
                    Timestamp.Send(useLocalTimeZone ? DateTimeOffset.Now : DateTimeOffset.UtcNow);
                }

                using (var cts1 = new CancellationTokenSource())
                    using (var cts2 = CancellationTokenSource.CreateLinkedTokenSource(cts1.Token, NodeDisposedToken))
                    {
                        var delayTask = GetDelayTask(stopwatch.Elapsed, ticksElapsed, currentInterval, cts2.Token);
                        if (delayTask.Status != TaskStatus.RanToCompletion)
                        {
                            await Task.WhenAny(
                                delayTask.IgnoreCancellation(),
                                Inlets.AnyMessageAvailableAsync());

                            cts1.Cancel();
                        }
                    }

                NodeDisposedToken.ThrowIfCancellationRequested();
            }
        }
Esempio n. 5
0
        protected override Func <TMessage> FindSender(IOutlet <TMessage> outletReceivingMessage)
        {
            var senders = Inlets.Select((inlet, index) => new Tuple <int, Func <TMessage> >(index, inlet.FindSender())).Where(t => t.Item2 != null).ToList();

            if (!senders.Any())
            {
                return(null);
            }

            var result = TieBreaker.ResolveTie(senders.Select(s => s.Item1));

            return(senders.Single(s => s.Item1 == result).Item2);
        }
Esempio n. 6
0
 private void SetupAttributtedPins()
 {
     foreach (var propertyInfo in GetType().GetRuntimeProperties())
     {
         var propertyTypeInfo = propertyInfo.PropertyType.GetTypeInfo();
         if (propertyTypeInfo.IsGenericType && propertyTypeInfo.GetGenericTypeDefinition() == typeof(Inlet <>))
         {
             var designerPropertiesAttributes = propertyInfo.GetCustomAttributes <DesignerPropertiesAttribute>();
             var basicInlet = Inlets.Create(propertyInfo.Name);
             basicInlet.SetAttribute("type", propertyTypeInfo.GenericTypeArguments[0].AssemblyQualifiedName);
             var inlet = CastInlet(basicInlet, propertyTypeInfo.GenericTypeArguments[0]);
             propertyInfo.SetValue(this, inlet);
         }
         if (propertyTypeInfo.IsGenericType && propertyTypeInfo.GetGenericTypeDefinition() == typeof(Outlet <>))
         {
             var designerPropertiesAttributes = propertyInfo.GetCustomAttributes <DesignerPropertiesAttribute>();
             var nonTypedOutlet = Outlets.Create(propertyInfo.Name);
             nonTypedOutlet.SetAttribute("type", propertyTypeInfo.GenericTypeArguments[0].AssemblyQualifiedName);
             var outlet = CastOutlet(nonTypedOutlet, propertyTypeInfo.GenericTypeArguments[0]);
             propertyInfo.SetValue(this, outlet);
         }
     }
 }
Esempio n. 7
0
 /// <summary>
 /// TBD
 /// </summary>
 /// <returns>TBD</returns>
 public override Shape DeepCopy()
 => new AmorphousShape(Inlets.Select(i => i.CarbonCopy()).ToImmutableArray(), Outlets.Select(o => o.CarbonCopy()).ToImmutableArray());
Esempio n. 8
0
 /// <summary>
 /// Compare this to another shape and determine whether the arrangement of ports is the same (including their ordering).
 /// </summary>
 /// <param name="shape">TBD</param>
 /// <returns>TBD</returns>
 public bool HasSamePortsAndShapeAs(Shape shape) => Inlets.Equals(shape.Inlets) && Outlets.Equals(shape.Outlets);