/// <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); } }
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(); }
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); }
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()); }
/// <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)); }