68 lines
2.7 KiB
C#
68 lines
2.7 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Input;
|
|
using JD.Interfaces.Remoting;
|
|
using JD.Remoting.Services;
|
|
using Plume.Icons;
|
|
using Plume.Interfaces.WPF.Actions;
|
|
using Plume.Interfaces.WPF.Dialogs;
|
|
using Action = Plume.Interfaces.WPF.Actions.Action;
|
|
|
|
namespace JD.Remoting.WPF.Actions
|
|
{
|
|
public class ConnectToAction : Action
|
|
{
|
|
public ConnectToAction()
|
|
:base("Connect To...", "Connect the application to a specific endpoint", StandardIcon.Wifi)
|
|
{
|
|
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override void TryExecute()
|
|
{
|
|
var dialogService = Context.DialogManager;
|
|
var pluginService = Context.ServiceManager.GetPluginService();
|
|
var notificationService = Context.NotificationManager;
|
|
var result = dialogService.ShowInputBox("Endpoint", "Please select an endpoint (ip:port, e.g. 168.0.1.24:801)", out var endPointString);
|
|
if (result.StandardButton == StandardButton.Ok)
|
|
{
|
|
try
|
|
{
|
|
if (!Regex.IsMatch(endPointString, @"\b(\d{1,3}\.){3}\d{1,3}\:\d{1,8}\b", RegexOptions.IgnoreCase))
|
|
{
|
|
throw new ArgumentException("Please provide an endpoint in the valid format ip:port, e.g. 168.0.1.24:801");
|
|
}
|
|
var elements = endPointString.Split(':');
|
|
var endPoint = new EndPointId(elements[0], int.Parse(elements[1]));
|
|
pluginService.Start(endPoint);
|
|
|
|
Task.Delay(500).ContinueWith(task =>
|
|
{
|
|
foreach (IPlugin plugin in pluginService)
|
|
{
|
|
if (!plugin.IsConnected)
|
|
{
|
|
notificationService.ShowError($"Unable to connect the plugin ({plugin.Name}) to the engine; target: {pluginService.EndPointId}");
|
|
}
|
|
}
|
|
});
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Context.Application.Logger.Error($"Unable to connect to {endPointString}. {exception}", exception);
|
|
notificationService.ShowError($"Unable to connect to {endPointString}. Details: {exception.Message}");
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override bool CanExecute()
|
|
{
|
|
IPluginService pluginService = Context.ServiceManager.GetPluginService();
|
|
return pluginService.Any() && !pluginService.All(p => p.IsConnected);
|
|
}
|
|
}
|
|
}
|