コード例 #1
0
 public BasicHubAction(ILogger <BasicHubAction> logger, INyxNode hub)
 {
     _logger = logger;
     _hub    = hub as INyxHub;
     _name   = "basic";
     _supportedActions.AddRange(new[]
     {
         Register, Ping
     });
 }
コード例 #2
0
        public AutoConnectToHub(IEnumerable <INyxNode> nodes,
                                IConfigManager config,
                                ILogger <AutoConnectToHub> logger)
        {
            var nyxNodes = nodes as IList <INyxNode> ?? nodes.ToList();

            _borg   = nyxNodes.FirstOrDefault(e => e is INyxBorg) as INyxBorg;
            _hub    = nyxNodes.FirstOrDefault(e => e is INyxHub) as INyxHub;
            _config = config;
            _logger = logger;
            ReloadConfig(null);
            _logger.Info("Auto Discovery loaded.");
            _cancelationToken = new CancellationTokenSource();
        }
コード例 #3
0
 public bool SeedFiles(INyxMessage message, INyxHub nyxHub)
 {
     // Do nothing just pass the file
     return(true);
 }
コード例 #4
0
ファイル: NyxMessageExtensions.cs プロジェクト: ycdivfx/nyx
 /// <summary>
 ///     Shorthand for the broadcast method of the hub.
 /// </summary>
 /// <param name="msg">Message to broadcast</param>
 /// <param name="hub">Hub from where the message is sent.</param>
 public static void BroadcastMessage(this INyxMessage msg, INyxHub hub)
 {
     hub.BroadcastMessage(msg);
 }
コード例 #5
0
        public NodeManager(IEnumerable <INyxNode> runningNodes,
                           ILogger <NodeManager> logger,
                           PluginManager pluginManager)
        {
            Current        = this;
            _logger        = logger;
            _pluginManager = pluginManager;
            _tasker        = new SerialAsyncTasker();
            // Find the hub if its running in this app domain.
            var nyxNodes = runningNodes as IList <INyxNode> ?? runningNodes.ToList();

            _hub  = nyxNodes.FirstOrDefault(n => n is INyxHub) as INyxHub;
            _borg = nyxNodes.FirstOrDefault(n => n is INyxBorg) as INyxBorg;
            if (_borg != null)
            {
                _computerInfo = new ComputerInfo();
            }
            _messageReceivedBorg = new Subject <INyxMessage>();
            _messageReceivedHub  = new Subject <INyxMessage>();
            SupportedActions     = _hub != null
                ? new[] { NodesInfo, NodesUpdateSubscribe, NodesPing, NodesPingStop }
                : new[] { NodesInfoReport };
            // Run the cleaner in a queue with a max of 5 items in the queue.
            if (_borg != null)
            {
                _internalHubWatch = Observable.Create <bool>(o =>
                {
                    var disposable = new CompositeDisposable();
                    var synlock    = new object();
                    var hubOnline  = false;
                    disposable.Add(_borg.ConnectionStatusStream
                                   .DistinctUntilChanged()
                                   .Subscribe(c =>
                    {
                        lock (synlock)
                        {
                            var tempState = c.HasFlag(ConnectionStatus.Online);
                            if (tempState == hubOnline)
                            {
                                return;
                            }
                            hubOnline = tempState;
                            o.OnNext(tempState);
                        }
                    }));
                    return(disposable);
                }).Publish().RefCount();

                _disposables.Add(_internalHubWatch
                                 .Where(s => !s)
                                 .ObserveOnPool()
                                 .Subscribe(o =>
                {
                    lock (NodesLock)
                    {
                        var removed = new List <NodeInfo>(_nodesInfo);
                        _nodesInfo.Clear();
                        _groups.NodesByGroup.Clear();
                        _nodesSubject.OnNext(new NodesChanges {
                            Removed = removed
                        });
                        _groupSubject.OnNext(GroupsInfo.Empty);
                        _logger.Debug("Removed all nodes. Hub is offline or we lost connection.");
                    }
                }));
            }
            if (_hub == null)
            {
                return;
            }
            _disposables.Add(Observable.Interval(TimeSpan.FromMinutes(1)).ObserveOn(new OrderedTaskScheduler(5)).Subscribe(o =>
            {
                lock (NodesLock)
                {
                    var removed = new List <NodeInfo>();
                    _nodesInfo.RemoveAll(ni =>
                    {
                        var res = DateTime.Now.Subtract(ni.TimeStamp).TotalSeconds > 140;
                        if (res)
                        {
                            removed.Add(ni);
                        }
                        return(res);
                    });
                    if (removed.Count == 0)
                    {
                        return;
                    }
                    _logger.Debug("Removed {0} dead nodes.", removed.Count);
                    foreach (var update in _pushUpdates)
                    {
                        SendNodesInfo(null, update, new List <NodeInfo>(), removed);
                    }
                }
            }));
        }