コード例 #1
0
 /// <summary>
 ///     Stops the <see cref="Pinger" /> server.
 /// </summary>
 public async void Stop()
 {
     _stop = true;
     _cancellationTokenSource.Cancel(false);
     if (_borg != null)
     {
         await _borg.SendMessage("nyx", NodesPingStop, true, 2);
     }
 }
コード例 #2
0
ファイル: TestControlsViewModel.cs プロジェクト: ycdivfx/nyx
        public TestControlsViewModel(
            INyxBorg borg,
            IConfigManager config
            )
        {
            PingCommand = ReactiveCommand.Create <object, Unit>(_ =>
            {
                for (int i = 0; i < PingCount; i++)
                {
                    borg.SendMessage(NyxMessage.Create("nyx", BasicHubAction.Ping, borg.NodeId));
                }
                return(Unit.Default);
            });

            SendActionCommand = ReactiveCommand.Create <object, Unit>(_ =>
            {
                borg.SendMessage(NyxMessage.Create(ActionTarget, ActionText, string.IsNullOrWhiteSpace(ActionSource) ? borg.NodeId : ActionSource));
                return(Unit.Default);
            });

            ConnectCommand = ReactiveCommand.Create <object, Unit>(_ =>
            {
                borg.Connect(ConnectionIp);
                return(Unit.Default);
            });

            _connectionIp = config.Get("borg_hubIp", "127.0.0.1");

            config.WhenConfigChanges
            .Throttle(TimeSpan.FromMilliseconds(200), ThreadPoolScheduler.Instance)
            .Where(k => k.Keys.Contains("borg_hubIp"))
            .Select(k => k.Sender.Get("borg_hubIp", "127.0.0.1"))
            .DistinctUntilChanged()
            .ObserveOnDispatcher()
            .Subscribe(s => ConnectionIp = s);

            borg.ConnectionStatusStream
            .ObserveOnDispatcher()
            .Subscribe(c =>
            {
                IsConnected = c.HasFlag(ConnectionStatus.Connected);
            });

            ValidActions = PluginManager.Instance
                           .GetExtensions()
                           .OfType <INyxMessageActions>()
                           .SelectMany(_ => _.SupportedActions).ToList();
        }
コード例 #3
0
 private void AsyncLoadToMessage(INyxMessage message, INyxBorg sender)
 {
     if (message.Has("fileTransfer"))
     {
         _logger.Warn("File serialization is already in progress for message {0}.", message);
         return;
     }
     message["fileTransfer"] = "1";
     foreach (var nyxFile in message.Files)
     {
         if (!File.Exists(nyxFile.Path))
         {
             break;
         }
         var filename = Path.GetFileName(nyxFile.Path);
         _logger.Debug("Converting file for message transfer.");
         var file = Convert.ToBase64String(File.ReadAllBytes(nyxFile.Path));
         message[string.Format("file_{0}", filename)] = file;
         try
         {
             if (nyxFile.DeleteOnTransfer)
             {
                 File.Delete(nyxFile.Path);
             }
         }
         catch (Exception ex)
         {
             _logger.Error("Error deleting file.", ex);
         }
     }
     sender.SendMessage(message, true);
 }
コード例 #4
0
        private void AsyncExtractFiles(INyxMessage message, INyxBorg nyxBorg)
        {
            if (message.Has("fileExtract"))
            {
                _logger.Warn("File extration is already in progress for message {0}.", message);
                return;
            }
            message["fileExtract"] = "1";
            var files = message.Elements.Where(s => s.Key.StartsWith("file_")).Select(s => s.Key).ToList();

            message.Files.Clear();
            var fullExtractPath = Path.Combine(_extractPath, nyxBorg.NodeId);

            foreach (var file in files)
            {
                var path = Path.Combine(fullExtractPath, file.Substring(5));
                _logger.Debug("Extracting file {0} to {1}", file, path);
                try
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(path));
                }
                catch (Exception ex)
                {
                    _logger.Error("Error creating directory for extraction.", ex);
                }
                File.WriteAllBytes(path, Convert.FromBase64String(message[file]));
                message.Remove(file);
                message.Files.Add(new NyxFile {
                    Name = file.Substring(5), Path = path, TransferType = GetType().Name
                });
            }
            nyxBorg.SendMessage(message.AsInternal());
        }
コード例 #5
0
ファイル: NyxMessageExtensions.cs プロジェクト: ycdivfx/nyx
 /// <summary>
 /// Shorthand for sending a message.
 /// </summary>
 /// <param name="msg">Message to send.</param>
 /// <param name="borg">Borg responsable to sending the message.</param>
 /// <param name="skip">Skips the message if hub offline.</param>
 /// <param name="timeout">If bigger than 0 or null, a TimeoutMessage operator is added.</param>
 /// <returns>Returns the obsersavle to track message status.</returns>
 public static IObservable <MessageStatus> SendMessage(this INyxMessage msg, INyxBorg borg, bool skip = false, double?timeout = null)
 {
     return(timeout.HasValue && timeout.Value > 0
         ? borg.SendMessage(msg, skip).TimeoutMessage(timeout.Value, msg)
         : borg.SendMessage(msg, skip));
 }