LoginManager.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. using FISLib;
  2. using FISLib.Connect;
  3. using FISLib.LiveVideo;
  4. using System;
  5. using System.Linq;
  6. using Vinno.FIS.Sonopost.Features.Config;
  7. using Vinno.FIS.Sonopost.Features.Oled;
  8. using Vinno.FIS.Sonopost.Managers.Interfaces;
  9. using Vinno.IUS.Common.Log;
  10. using Vinno.IUS.Common.Utilities;
  11. namespace Vinno.FIS.Sonopost.Managers
  12. {
  13. internal class LoginManager : SonopostManager, ILoginManager
  14. {
  15. private FISServerInfo _serverInfo;
  16. private FISAccountInfo _accountInfo;
  17. private UltrasoundMachineInfo _ultrasoundMachineInfo;
  18. private readonly IConfigManager _configManager;
  19. private readonly IConnectionService _connectionService;
  20. private IVersionCheckManager _versionCheckManager;
  21. private ILiveVideoManager _liveVideoManager;
  22. private IOledManager _oledManager;
  23. private IRemedicalManager _remedicalManager;
  24. private IKeyBoardListenManager _keyBoardListenManager;
  25. public bool IsLoginWithAccountAndPassword { get; private set; }
  26. public bool HasGetFasterServer { get; private set; }
  27. public string UniqueId { get; private set; }
  28. public string QRCodeString { get; private set; }
  29. public DeviceStatus DeviceStatus { get; private set; }
  30. public bool IsConnectWithOldServer => FISIMPL.FISIMPL.IsConnectWithOldServer;
  31. public LoginManager()
  32. {
  33. _configManager = AppManager.Instance.GetManager<IConfigManager>();
  34. _connectionService = AppManager.Instance.GetManager<IFISManager>().FISConnectionService;
  35. _connectionService.SetIsSonopost(true);
  36. _connectionService.FISDeviceStatusChanged += OnFISDeviceStatusChanged;
  37. _ultrasoundMachineInfo = AppManager.Instance.GetManager<IFISManager>().UltrasoundMachineInfo;
  38. HasGetFasterServer = false;
  39. IsLoginWithAccountAndPassword = SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword;
  40. }
  41. public void Init()
  42. {
  43. _liveVideoManager = AppManager.Instance.GetManager<ILiveVideoManager>();
  44. _versionCheckManager = AppManager.Instance.GetManager<IVersionCheckManager>();
  45. _oledManager = AppManager.Instance.GetManager<IOledManager>();
  46. _keyBoardListenManager = AppManager.Instance.GetManager<IKeyBoardListenManager>();
  47. _remedicalManager = AppManager.Instance.GetManager<IRemedicalManager>();
  48. }
  49. private void OnFISDeviceStatusChanged(object sender, FISDeviceStatusInfo e)
  50. {
  51. try
  52. {
  53. DeviceStatus = e.Status;
  54. Logger.WriteLineInfo($"Device Status Changed:{e.Status},UniqueId:{e.UniqueId}");
  55. switch (e.Status)
  56. {
  57. case DeviceStatus.Logon:
  58. UniqueId = e.UniqueId;
  59. QRCodeString = _connectionService.GetQRStringForVCloudLogin();
  60. _configManager.SaveVCloudServer();
  61. if (SonopostUserDefinedSettings.Instance.IsFirstLogin && _liveVideoManager.SonoDevice != null && _liveVideoManager.SonoDevice.Capabilities.Any(x => x.Width == 1280 && x.Height == 720))
  62. {
  63. var videoInfos = SonopostUserDefinedSettings.Instance.HardwareSetting.VideoDeviceInfoList;
  64. var config = videoInfos?.FirstOrDefault(x => x.Category == FISLiveChannelCategory.Main);
  65. if (config == null)
  66. {
  67. config = new FISVideoDeviceInfo
  68. {
  69. Category = FISLiveChannelCategory.Main
  70. };
  71. videoInfos.Add(config);
  72. }
  73. config.Id = _liveVideoManager.SonoDevice.Id;
  74. config.Name = _liveVideoManager.SonoDevice.Name;
  75. config.IsEnable = true;
  76. config.Width = 1280;
  77. config.Height = 720;
  78. config.FrameRate = 20;
  79. config.IsAvailable = true;
  80. SonopostUserDefinedSettings.Instance.IsFirstLogin = false;
  81. _configManager.Save();
  82. }
  83. _liveVideoManager.UpdateDeviceResoution();
  84. if (IsConnectWithOldServer)
  85. {
  86. if (SonopostUserDefinedSettings.Instance.CaptureSetting.RealTimeCaptureEnabled)
  87. {
  88. SonopostUserDefinedSettings.Instance.CaptureSetting.RealTimeCaptureEnabled = false;
  89. _configManager.Save();
  90. _keyBoardListenManager.StopKeyBoardListen();
  91. }
  92. }
  93. else
  94. {
  95. _liveVideoManager.ChangeRealTimeCaptureSetting();
  96. _liveVideoManager.ReUploadRestVid();
  97. }
  98. _remedicalManager.ReUploadAll();
  99. _versionCheckManager.CheckVersion();
  100. var organization = _connectionService.GetOrganizationName();
  101. if (organization != _ultrasoundMachineInfo.Organizataion)
  102. {
  103. _ultrasoundMachineInfo.Organizataion = organization;
  104. FISIMPL.FISIMPL.SetUltrasoundMachineInfo(_ultrasoundMachineInfo);
  105. }
  106. _oledManager.ShowStatus(OledMessage.Logined);
  107. break;
  108. case DeviceStatus.Logoning:
  109. UniqueId = string.Empty;
  110. QRCodeString = string.Empty;
  111. _oledManager.ShowStatus(OledMessage.Logining);
  112. break;
  113. case DeviceStatus.Reconnecting:
  114. UniqueId = string.Empty;
  115. QRCodeString = string.Empty;
  116. _oledManager.ShowStatus(OledMessage.Reconnecting);
  117. break;
  118. case DeviceStatus.LoginFailed:
  119. case DeviceStatus.WrongAccount:
  120. case DeviceStatus.WrongPassword:
  121. UniqueId = string.Empty;
  122. QRCodeString = string.Empty;
  123. _oledManager.ShowStatus(OledMessage.LoginFail);
  124. break;
  125. default:
  126. UniqueId = string.Empty;
  127. QRCodeString = string.Empty;
  128. _oledManager.ShowStatus(OledMessage.Offline);
  129. break;
  130. }
  131. }
  132. catch (Exception ex)
  133. {
  134. Logger.WriteLineError($"LoginManager OnFISDeviceStatusChanged Error:{ex}");
  135. }
  136. }
  137. public DeviceStatus Login(string organizationName = null)
  138. {
  139. try
  140. {
  141. var userName = DesBuilder.Decrypt(SonopostUserDefinedSettings.Instance.ServerSetting.UserName);
  142. var password = DesBuilder.Decrypt(SonopostUserDefinedSettings.Instance.ServerSetting.UserPassword);
  143. IsLoginWithAccountAndPassword = SonopostUserDefinedSettings.Instance.ServerSetting.IsLoginWithAccountAndPassword;
  144. AppManager.Instance.GetManager<IOledManager>().ShowStatus(OledMessage.Logining);
  145. if (IsLoginWithAccountAndPassword)
  146. {
  147. _accountInfo = new FISAccountInfo(userName, password, true);
  148. }
  149. else
  150. {
  151. _accountInfo = new FISAccountInfo(userName, password, false);
  152. }
  153. _serverInfo = new FISServerInfo(_configManager.VCloudServerAddress, _configManager.VCloudServerPort);
  154. var connectionInfo = new FISConnectionInfo(_serverInfo, _accountInfo, organizationName, new FISFeatureSettings
  155. {
  156. AfterSalesEnabled = true,
  157. LiveVideoEnabled = true,
  158. RemedicalEnabled = true,
  159. TeachingEnabled = false,
  160. });
  161. var loginResult = _connectionService.Connect(connectionInfo, false, "", "");
  162. if (loginResult == null)
  163. {
  164. loginResult = new FISDeviceStatusInfo
  165. {
  166. Status = DeviceStatus.LoginFailed,
  167. };
  168. }
  169. OnFISDeviceStatusChanged(this, loginResult);
  170. return loginResult.Status;
  171. }
  172. catch (Exception ex)
  173. {
  174. Logger.WriteLineError($"LoginManager Login Error:{ex}");
  175. return DeviceStatus.LoginFailed;
  176. }
  177. }
  178. public bool Logoff()
  179. {
  180. try
  181. {
  182. _connectionService.Disconnect();
  183. return true;
  184. }
  185. catch (Exception ex)
  186. {
  187. Logger.WriteLineError($"LoginManager LogOff Error:{ex}");
  188. return false;
  189. }
  190. }
  191. public FISServerInfo GetFasterServerInfo()
  192. {
  193. try
  194. {
  195. var result = _connectionService.GetFasterServer(false);
  196. if (result != null)
  197. {
  198. HasGetFasterServer = true;
  199. }
  200. return result;
  201. }
  202. catch (Exception ex)
  203. {
  204. Logger.WriteLineError($"GetFasterServerInfo Error:{ex}");
  205. }
  206. return null;
  207. }
  208. public bool ChangeServer(string address, int port, string vCloudServerName)
  209. {
  210. try
  211. {
  212. _configManager.SwitchVCloudServer(address, port, vCloudServerName);
  213. ResetServerAddress($"{address}:{port}");
  214. return true;
  215. }
  216. catch
  217. {
  218. return false;
  219. }
  220. }
  221. private void ResetServerAddress(string serverAddress)
  222. {
  223. if (string.IsNullOrEmpty(serverAddress))
  224. {
  225. return;
  226. }
  227. var server = serverAddress.Split(':');
  228. if (server.Length == 2)
  229. {
  230. var host = server[0];
  231. var port = server[1];
  232. int.TryParse(port, out var portNumber);
  233. _serverInfo = new FISServerInfo(host, portNumber);
  234. }
  235. }
  236. public override void DoDispose()
  237. {
  238. try
  239. {
  240. if (DeviceStatus == DeviceStatus.Logon)
  241. {
  242. Logoff();
  243. }
  244. UniqueId = string.Empty;
  245. QRCodeString = string.Empty;
  246. _connectionService.FISDeviceStatusChanged -= OnFISDeviceStatusChanged;
  247. }
  248. catch (Exception ex)
  249. {
  250. Logger.WriteLineError($"LoginManager DoDispose Error:{ex}");
  251. }
  252. base.DoDispose();
  253. }
  254. }
  255. }