using FISLib.Connect;
using System.Linq;
using Vinno.FIS.Sonopost.Features.Config;
using Vinno.FIS.Sonopost.WebApi.Models;
using Vinno.IUS.Common.Utilities;
namespace Vinno.FIS.Sonopost.WebApi.Controllers
{
[WebApiController("Server")]
internal class ServerController : BaseController
{
///
/// 登录
///
///
///
[WebApiAction("Login")]
public Result Login(ServerLoginRequest2 request)
{
if (!request.Ipv4.Equals(ConfigManager.VCloudServerAddress) || !request.Port.Equals(ConfigManager.VCloudServerPort))
{
bool changed = TerminalClientManager.ChangeServer(request.Ipv4, request.Port);
if (!changed) Result.Fail();
}
var isLoginWithAccountAndPassword = SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword;
var hospitalName = request.HospitalName?.Trim();
if (string.IsNullOrWhiteSpace(hospitalName))
{
hospitalName = null;
}
if (!isLoginWithAccountAndPassword)
{
UpdateAccount(string.Empty, string.Empty);
}
else
{
if (string.IsNullOrWhiteSpace(request.Account))
{
return Result.Fail("InputAccountTips");
}
if (string.IsNullOrWhiteSpace(request.Password))
{
return Result.Fail("InputPasswordTips");
}
UpdateAccount(request.Account, request.Password);
}
var status = LoginManager.Login(hospitalName);
if (status != DeviceStatus.Logon)
{
return Result.Fail(status.ToString());
}
ServerLoginResult result = new ServerLoginResult
{
UniqueId = TerminalClientManager.UniqueId,
QRCodeString = LoginManager.QRCodeString,
};
return Result.Success(result);
}
///
/// 登出
///
///
[WebApiAction]
public Result Logout()
{
if (LoginManager.LoginStatus != DeviceStatus.Logon)
{
return Result.Success(true);
}
SonopostUserDefinedSettings.Instance.ServerSetting.IsAutoLogin = false;
ConfigManager.Save();
if (LoginManager.Logoff())
{
return Result.Success(LoginManager.LoginStatus != DeviceStatus.Logon);
}
else
{
return Result.Fail($"LogOffError");
}
}
///
/// 获取登录信息
///
///
[WebApiAction]
public Result GetLoginInfo()
{
var username = DesBuilder.Decrypt(SonopostUserDefinedSettings.Instance.ServerSetting.UserName);
var pwd = DesBuilder.Decrypt(SonopostUserDefinedSettings.Instance.ServerSetting.UserPassword);
bool isLoginWithAccountAndPassword = false;
bool isExisted = false;
if (LoginManager.LoginStatus == DeviceStatus.Logon)
{
isLoginWithAccountAndPassword = TerminalClientManager.IsLoginWithAccountAndPassword;
}
else
{
isLoginWithAccountAndPassword = SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword;
}
var servers = SonopostUserDefinedSettings.Instance.ServerSetting.Servers;
if (servers.Any(x => x.Host.Equals(ConfigManager.VCloudServerAddress) && x.Port.Equals(ConfigManager.VCloudServerPort)))
{
isExisted = true;
}
var result = new ServerLoginInfoResult
{
QRCodeString = LoginManager.QRCodeString,
UniqueId = TerminalClientManager.UniqueId,
Address = ConfigManager.VCloudServerAddress,
Port = ConfigManager.VCloudServerPort,
Account = username,
Password = pwd,
IsLoginWithAccountAndPassword = isLoginWithAccountAndPassword,
IsExisted = isExisted,
DongleId = FISManager.UltrasoundMachineInfo.DongleId,
};
return Result.Success(result);
}
///
/// 当前是否已登录
///
///
[WebApiAction]
public Result CheckIsLogon()
{
return Result.Success(LoginManager.LoginStatus == DeviceStatus.Logon);
}
///
/// 获取服务列表
///
///
[WebApiAction]
public Result GetServerList()
{
if (LoginManager.LoginStatus != DeviceStatus.Logon)
{
var fasterServer = TerminalClientManager.GetFasterServerInfo();
if (fasterServer != null && SonopostUserDefinedSettings.Instance.ServerSetting.Servers.FirstOrDefault(x => x.IsDefault).ToString() != fasterServer.ToString())
{
var defaultServer = SonopostUserDefinedSettings.Instance.ServerSetting.Servers.FirstOrDefault(x => x.IsDefault);
var oldDefaultServer = new FISServerInfo(defaultServer.Host, defaultServer.Port, true);
var newDefaultServer = new FISServerInfo(fasterServer.Host, fasterServer.Port, true);
ConfigManager.RefreshDefaultServer(oldDefaultServer, newDefaultServer);
defaultServer.Host = fasterServer.Host;
defaultServer.Port = fasterServer.Port;
ConfigManager.Save();
}
}
return Result.Success(SonopostUserDefinedSettings.Instance.ServerSetting.Servers);
}
///
/// 检查网络
///
///
[WebApiAction]
public Result CheckNetwork()
{
if (TestManager.IsRunning)
{
TestManager.Stop();
}
TestManager.Run();
return Result.Success();
}
///
/// 获取 检查网络 进度
///
///
[WebApiAction]
public Result GetCheckNetworkProgress()
{
return Result.Success(TestManager.CurrentProgress);
}
///
/// 获取DongleId
///
///
[WebApiAction]
public Result GetDongleId()
{
return Result.Success(FISManager.UltrasoundMachineInfo.DongleId);
}
///
/// 获取 当前的登录模式
///
///
[WebApiAction]
public Result GetCurrentVCloudLoginMode()
{
var currentMode = TerminalClientManager.IsLoginWithAccountAndPassword;
return Result.Success(new VCloudLoginRequest { IsLoginWithAccountAndPassword = currentMode });
}
///
/// 切换已登录的云服务器
///
///
[WebApiAction]
public Result SwtichLoginServer(ServerNodeRequest serverNodeRequest)
{
if (LoginManager.LoginStatus == DeviceStatus.Logon)
{
if (!LoginManager.Logoff())
{
return Result.Fail($"LogOffError");
}
}
if (serverNodeRequest == null)
{
return Result.Fail($"Server Info is Null");
}
if (SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword)
{
SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword = false;
ConfigManager.Save();
}
return Login(new ServerLoginRequest2
{
Ipv4 = serverNodeRequest.Ipv4,
Port = serverNodeRequest.Port,
});
}
#region Private Methods
private void UpdateAccount(string name, string password)
{
SonopostUserDefinedSettings.Instance.ServerSetting.UserName = DesBuilder.Encrypt(name);
SonopostUserDefinedSettings.Instance.ServerSetting.UserPassword = DesBuilder.Encrypt(password);
SonopostUserDefinedSettings.Instance.ServerSetting.IsAutoLogin = true;
ConfigManager.Save();
}
#endregion Private Methods
}
}