79 lines
3 KiB
C#
79 lines
3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using JD.Interfaces.Remoting;
|
|
using JD.Remoting.Services;
|
|
using JD.Remoting.WPF.Module.Settings;
|
|
using Plume.Icons;
|
|
using Plume.Interfaces.WPF;
|
|
using Plume.Interfaces.WPF.Actions;
|
|
using Plume.Interfaces.WPF.Notifications;
|
|
|
|
namespace JD.Remoting.WPF.Actions
|
|
{
|
|
public class ConnectAction : Plume.Interfaces.WPF.Actions.Action<EngineConnection>
|
|
{
|
|
public ConnectAction(EngineConnection connection)
|
|
:base($"{connection}", $"Connect the application to {connection}", StandardIcon.Wifi)
|
|
{
|
|
CommandParameter = connection;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override void Execute(IActionContext context, EngineConnection connection)
|
|
{
|
|
var app = Application.Current as IWpfApplication;
|
|
INotificationManager notificationService = app.NotificationManager;
|
|
IPluginService pluginService = app.ServiceManager.GetPluginService();
|
|
|
|
pluginService?.Start(new EndPointId(connection.Ip, connection.Port));
|
|
|
|
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}");
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override bool CanExecute(IActionContext context, EngineConnection parameter)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public static MenuItem GetMenu()
|
|
{
|
|
var app = Application.Current as IWpfApplication;
|
|
var connectToMenuItem = new MenuItem { Header = "Connect", Icon = new Icon(StandardIcon.Wifi).ToImage(16, 16) };
|
|
var remotingSettings = app.SettingsManager.Get<RemotingSettings>();
|
|
if (remotingSettings == null)
|
|
return null;
|
|
|
|
remotingSettings.PropertyChanged += (sender, args) => { UpdateConnectionsMenus(connectToMenuItem, remotingSettings); };
|
|
remotingSettings.Connections.CollectionChanged += (sender, args) => { UpdateConnectionsMenus(connectToMenuItem, remotingSettings); };
|
|
UpdateConnectionsMenus(connectToMenuItem, remotingSettings);
|
|
|
|
return connectToMenuItem;
|
|
}
|
|
|
|
private static void UpdateConnectionsMenus(MenuItem parentMenu, RemotingSettings settings)
|
|
{
|
|
parentMenu.Items.Clear();
|
|
var connections = settings.Connections.ToList();
|
|
connections.Insert(0, EngineConnection.Default);
|
|
foreach (var connection in connections)
|
|
{
|
|
var action = new ConnectAction(connection);
|
|
parentMenu.Items.Add(action.ToMenuItem());
|
|
}
|
|
}
|
|
}
|
|
}
|