Files
qhmes/yy-admin-master/YY.Admin/ViewModels/Dialogs/ServerSettingsDialogViewModel.cs

139 lines
4.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using YY.Admin.Helper;
namespace YY.Admin.ViewModels.Dialogs
{
public class ServerSettingsDialogViewModel : BindableBase, IDialogAware
{
private const string DefaultWebSocketPath = "/websocket/scada-sync";
private string _loadedWebSocketUrl = string.Empty;
private string _loadedAutoWebSocketUrl = string.Empty;
public string Title => "服务器设置";
private string _ip = "127.0.0.1";
public string Ip
{
get => _ip;
set => SetProperty(ref _ip, value);
}
private int _port = 8080;
public int Port
{
get => _port;
set => SetProperty(ref _port, value);
}
private string _webSocketUrl = string.Empty;
public string WebSocketUrl
{
get => _webSocketUrl;
set => SetProperty(ref _webSocketUrl, value);
}
private string _basePath = "/jeecg-boot";
public string BasePath
{
get => _basePath;
set => SetProperty(ref _basePath, value);
}
private string _errorMessage = string.Empty;
public string ErrorMessage
{
get => _errorMessage;
set => SetProperty(ref _errorMessage, value);
}
private bool _disconnectConnection;
/// <summary>
/// 是否断开连接true=断开false=连接)
/// </summary>
public bool DisconnectConnection
{
get => _disconnectConnection;
set
{
if (SetProperty(ref _disconnectConnection, value))
{
RaisePropertyChanged(nameof(IsConnectionFieldsEnabled));
}
}
}
/// <summary>
/// 连接参数是否可编辑(勾选断开连接后禁用)。
/// </summary>
public bool IsConnectionFieldsEnabled => !DisconnectConnection;
public DelegateCommand SaveCommand { get; }
public DelegateCommand CancelCommand { get; }
public DialogCloseListener RequestClose { get; private set; }
public ServerSettingsDialogViewModel()
{
SaveCommand = new DelegateCommand(Save);
CancelCommand = new DelegateCommand(() => RequestClose.Invoke(new DialogResult(ButtonResult.Cancel)));
}
public bool CanCloseDialog() => true;
public void OnDialogClosed() { }
public void OnDialogOpened(IDialogParameters parameters)
{
var settings = ServerSettingsStore.Load();
_loadedAutoWebSocketUrl = ServerSettingsStore.BuildDefaultWebSocketUrl(settings.BaseScheme, settings.Ip, settings.Port, settings.BasePath, settings.WebSocketPath);
Ip = settings.Ip;
Port = settings.Port;
WebSocketUrl = string.IsNullOrWhiteSpace(settings.WebSocketUrl)
? _loadedAutoWebSocketUrl
: settings.WebSocketUrl;
_loadedWebSocketUrl = WebSocketUrl;
BasePath = string.IsNullOrWhiteSpace(settings.BasePath) ? "/jeecg-boot" : settings.BasePath;
DisconnectConnection = settings.DisconnectConnection;
ErrorMessage = string.Empty;
}
private void Save()
{
ErrorMessage = string.Empty;
if (string.IsNullOrWhiteSpace(Ip))
{
ErrorMessage = "IP 不能为空";
return;
}
if (Port <= 0 || Port > 65535)
{
ErrorMessage = "端口号必须在 1-65535 之间";
return;
}
try
{
var basePath = BasePath?.Trim() ?? "/jeecg-boot";
var shouldAutoRebuildWs = string.IsNullOrWhiteSpace(WebSocketUrl)
|| string.Equals(WebSocketUrl.Trim(), _loadedAutoWebSocketUrl, StringComparison.OrdinalIgnoreCase)
|| string.Equals(WebSocketUrl.Trim(), _loadedWebSocketUrl, StringComparison.OrdinalIgnoreCase);
var finalWsUrl = shouldAutoRebuildWs
? ServerSettingsStore.BuildDefaultWebSocketUrl("http", Ip.Trim(), Port, basePath, DefaultWebSocketPath)
: WebSocketUrl.Trim();
ServerSettingsStore.Save(new ServerSettingsStore.ServerSettingsModel
{
Ip = Ip.Trim(),
Port = Port,
BaseScheme = "http",
BasePath = basePath,
WebSocketUrl = finalWsUrl,
WebSocketPath = DefaultWebSocketPath,
DisconnectConnection = DisconnectConnection
});
RequestClose.Invoke(new DialogResult(ButtonResult.OK));
}
catch (Exception ex)
{
ErrorMessage = $"保存失败:{ex.Message}";
}
}
}
}