Эх сурвалжийг харах

会诊,远程维护,远程考核Dispose逻辑优化,当连接状态,会先断开连接。

felix 2 жил өмнө
parent
commit
93ceae4398

+ 5 - 0
FISSDK/FISSDK/AfterSales/FISAfterSales.cs

@@ -179,6 +179,11 @@ namespace FISLib.AfterSales
             if (!_disposed)
             {
                 CurrentTask?.Dispose();
+                if (ClientId != null)
+                {
+                    MasterChanged?.Invoke(this, null);
+                    ClientId = null;
+                }
                 FISNotificationPool.Instance.NotificationReceived -= OnNotificationReceived;
                 _disposed = true;
             }

+ 12 - 0
FISSDK/FISSDK/Consultation/FISConsultationForAndroid.cs

@@ -27,6 +27,10 @@ namespace FISLib.Consultation
 
         private FISConsultationVideoFrameData _localImage;
 
+        private FISConsultationUserLoginStatus _currentLoginStatus;
+
+        private bool _isScanLogin;
+
         private List<FISConsultationMemberInfo> _consultaitonMemberList;
 
         private ConcurrentDictionary<string, FISConsultationVideoFrameData> _remoteImageList;
@@ -126,6 +130,8 @@ namespace FISLib.Consultation
         public FISConsultationForAndroid()
         {
             _consultationService = FISJsonRpcClient.GetService<IConsultationService>();
+            _currentLoginStatus = FISConsultationUserLoginStatus.Offline;
+            _isScanLogin = false;
             _ultrasoundImage = new FISVideoFrameData(0, 0, null);
             _ultrasoundCamera = new FISVideoFrameData(0, 0, null);
             _localImage = new FISConsultationVideoFrameData();
@@ -860,6 +866,8 @@ namespace FISLib.Consultation
 
         private void HandleFISConsultationUserLoginStatusChanged(FISUserLoginStatusArgs fisUserLoginStatusArgs)
         {
+            _currentLoginStatus = fisUserLoginStatusArgs.Status;
+            _isScanLogin = fisUserLoginStatusArgs.IsScanLogin;
             if (fisUserLoginStatusArgs.Status == FISConsultationUserLoginStatus.Logon)
             {
                 _userId = fisUserLoginStatusArgs.UserId;
@@ -1098,6 +1106,10 @@ namespace FISLib.Consultation
                     _consultaitonMemberList.Clear();
                     _remoteImageList.Clear();
                 }
+                if (_currentLoginStatus == FISConsultationUserLoginStatus.Logon)
+                {
+                    HandleFISConsultationUserLoginStatusChanged(new FISUserLoginStatusArgs(FISConsultationUserLoginStatus.Offline, null, null, _isScanLogin));
+                }
             }
             _disposed = true;
         }

+ 12 - 0
FISSDK/FISSDK/Consultation/FISConsultationForWindows.cs

@@ -24,6 +24,10 @@ namespace FISLib.Consultation
 
         private List<FISConsultationMemberInfo> _consultaitonMemberList;
 
+        private FISConsultationUserLoginStatus _currentLoginStatus;
+
+        private bool _isScanLogin;
+
         private ConcurrentDictionary<string, PipeServer> _remoteVideoPipeServerList;
 
         private ConcurrentDictionary<string, FISConsultationVideoFrameData> _remoteImageList;
@@ -116,6 +120,8 @@ namespace FISLib.Consultation
         public FISConsultationForWindows()
         {
             _consultationService = FISJsonRpcClient.GetService<IConsultationService>();
+            _currentLoginStatus = FISConsultationUserLoginStatus.Offline;
+            _isScanLogin = false;
             _ultrasoundCamera = new FISVideoFrameData(0, 0, null);
             _ultrasoundImage = new FISVideoFrameData(0, 0, null);
             _localImage = new FISConsultationVideoFrameData();
@@ -808,6 +814,8 @@ namespace FISLib.Consultation
 
         private void HandleFISConsultationUserLoginStatusChanged(FISUserLoginStatusArgs fisUserLoginStatusArgs)
         {
+            _currentLoginStatus = fisUserLoginStatusArgs.Status;
+            _isScanLogin = fisUserLoginStatusArgs.IsScanLogin;
             if (fisUserLoginStatusArgs.Status == FISConsultationUserLoginStatus.Logon)
             {
                 _userId = fisUserLoginStatusArgs.UserId;
@@ -1004,6 +1012,10 @@ namespace FISLib.Consultation
                     _consultaitonMemberList.Clear();
                     _remoteImageList.Clear();
                 }
+                if (_currentLoginStatus == FISConsultationUserLoginStatus.Logon)
+                {
+                    HandleFISConsultationUserLoginStatusChanged(new FISUserLoginStatusArgs(FISConsultationUserLoginStatus.Offline, null, null, _isScanLogin));
+                }
                 _disposed = true;
             }
         }

+ 7 - 0
FISSDK/FISSDK/Teaching/FISTeaching.cs

@@ -10,6 +10,7 @@ namespace FISLib.Teaching
     {
         private readonly ITeachingService _teachingService;
         private bool _disposed;
+        private FISStudentAccountState _currentStudentAccountState;
 
         /// <summary>
         /// Student Account State Changed event
@@ -24,6 +25,7 @@ namespace FISLib.Teaching
         public FISTeaching()
         {
             _teachingService = FISJsonRpcClient.GetService<ITeachingService>();
+            _currentStudentAccountState = FISStudentAccountState.Unknown;
             FISNotificationPool.Instance.NotificationReceived += OnNotificationReceived;
         }
 
@@ -115,6 +117,10 @@ namespace FISLib.Teaching
         {
             if (!_disposed)
             {
+                if (_currentStudentAccountState == FISStudentAccountState.Connected)
+                {
+                    HandleFISTeachingStudentAccountStateChanged((int)FISStudentAccountState.DisConnected);
+                }
                 FISNotificationPool.Instance.NotificationReceived -= OnNotificationReceived;
                 _disposed = true;
             }
@@ -155,6 +161,7 @@ namespace FISLib.Teaching
         private void HandleFISTeachingStudentAccountStateChanged(int paramterValue)
         {
             var fisStudentAccountState = (FISStudentAccountState)paramterValue;
+            _currentStudentAccountState = fisStudentAccountState;
             StudentAccountStateChanged?.Invoke(this, fisStudentAccountState);
         }
 

+ 8 - 5
Vinno.vCloud.Common.FIS/AfterSales/AfterSales.cs

@@ -547,10 +547,17 @@ namespace Vinno.vCloud.Common.FIS.AfterSales
         {
             if (!_disposed)
             {
+                lock (_terminalStorageInfoLocker)
+                {
+                    _terminalStorageInfo = null;
+                }
                 _leaf.MessageArrived -= OnMessageArrived;
                 if (_master != null)
                 {
-                    ForceDisconnect();
+                    if (!vCloudServerConfig.Instance.IsFeatureReleased)
+                    {
+                        ForceDisconnect();
+                    }
                     _master = null;
                     OnMasterChanged(null);
                 }
@@ -560,10 +567,6 @@ namespace Vinno.vCloud.Common.FIS.AfterSales
 
         public void Dispose()
         {
-            lock (_terminalStorageInfoLocker)
-            {
-                _terminalStorageInfo = null;
-            }
             DoDispose();
             GC.SuppressFinalize(this);
         }

+ 4 - 1
Vinno.vCloud.Common.FIS/AfterSales/AfterSalesV2.cs

@@ -956,7 +956,10 @@ namespace Vinno.vCloud.Common.FIS.AfterSales
                 }
                 if (_master != null)
                 {
-                    ForceDisconnect();
+                    if (!vCloudServerConfig.Instance.IsFeatureReleased)
+                    {
+                        ForceDisconnect();
+                    }
                     _master = null;
                     OnMasterChanged(null);
                 }

+ 4 - 0
Vinno.vCloud.Common.FIS/FLYINSONOLogin/FLYINSONOUser.cs

@@ -627,6 +627,10 @@ namespace Vinno.vCloud.Common.FIS.FLYINSONOLogin
                 _connectionChecker = null;
             }
             _heartRateKeeper?.Stop();
+            if (Status == FLYINSONOUserLoginStatus.Logon)
+            {
+                LogOff();
+            }
             if (_clientLeaf != null)
             {
                 _clientLeaf.MessageArrived -= OnMessageArrived;

+ 8 - 1
Vinno.vCloud.Common.FIS/Teaching/Teaching.cs

@@ -384,7 +384,14 @@ namespace Vinno.vCloud.Common.FIS.Teaching
                 _cancellationTokenSource?.Cancel();
                 if (StudentState == StudentAccountState.Connected)
                 {
-                    StudentLogOff();
+                    if (vCloudServerConfig.Instance.IsFeatureReleased)
+                    {
+                        StudentAccountStateChanged?.Invoke(this, StudentAccountState.DisConnected);
+                    }
+                    else
+                    {
+                        StudentLogOff();
+                    }
                 }
                 foreach (var captureData in _uploadingCaptureDatas.Values.ToArray())
                 {

+ 5 - 0
Vinno.vCloud.Common.FIS/vCloudServerConfig.cs

@@ -29,6 +29,11 @@ namespace Vinno.vCloud.Common.FIS
         /// </summary>
         public bool MergedChannel { get; set; }
 
+        /// <summary>
+        /// Feature是否Released
+        /// </summary>
+        public bool IsFeatureReleased { get; set; }
+
         private static vCloudServerConfig _instance;
         public static vCloudServerConfig Instance => _instance ?? (_instance = new vCloudServerConfig());
 

+ 2 - 0
Vinno.vCloud.Common.FIS/vCloudTerminal.cs

@@ -393,6 +393,7 @@ namespace Vinno.vCloud.Common.FIS
         /// <param name="enabledFeatureTypes">The enabled feature types.</param>
         public void UpdateFeatures(IEnumerable<TerminalFeatureType> enabledFeatureTypes)
         {
+            vCloudServerConfig.Instance.IsFeatureReleased = false;
             if (!_isUseOldTerminalSdk)
             {
                 var removedFeatures = _features.Keys.Where(f => !enabledFeatureTypes.Contains(f)).ToList();
@@ -815,6 +816,7 @@ namespace Vinno.vCloud.Common.FIS
 
         private void ReleaseFeatures()
         {
+            vCloudServerConfig.Instance.IsFeatureReleased = true;
             foreach (var type in _features.Keys.ToList())
             {
                 var feature = _features[type];

+ 2 - 0
Vinno.vCloud.Common.FIS/vCloudTerminalV2.cs

@@ -225,6 +225,7 @@ namespace Vinno.vCloud.Common.FIS
         /// <param name="enabledFeatureTypes">The enabled feature types.</param>
         public void UpdateFeatures(IEnumerable<TerminalFeatureType> enabledFeatureTypes)
         {
+            vCloudServerConfig.Instance.IsFeatureReleased = false;
             var removedFeatures = _features.Keys.Where(f => !enabledFeatureTypes.Contains(f)).ToList();
             foreach (var feature in removedFeatures)
             {
@@ -623,6 +624,7 @@ namespace Vinno.vCloud.Common.FIS
 
         private void ReleaseFeatures()
         {
+            vCloudServerConfig.Instance.IsFeatureReleased = true;
             foreach (var type in _features.Keys.ToList())
             {
                 var feature = _features[type];