[WiFi] Cancel tasks for WPS connection in CancelWps() (#315)
authorchleun-moon <32117100+chleun-moon@users.noreply.github.com>
Thu, 28 Jun 2018 06:39:40 +0000 (15:39 +0900)
committertaesubkim <35015408+taesubkim@users.noreply.github.com>
Thu, 28 Jun 2018 06:39:40 +0000 (15:39 +0900)
* [WiFi] Cancel tasks for WPS connection in CancelWps()

* [WiFi] Remove logs

src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAP.cs

index 6715646..17b3b70 100644 (file)
@@ -36,6 +36,8 @@ namespace Tizen.Network.WiFi
         private WiFiSecurity _security;
         private bool _disposed = false;
 
+        private static TaskCompletionSource<WiFiAP> wpsWithoutSsidTask = null;
+        private static Dictionary<IntPtr, TaskCompletionSource<bool>> _wpsTaskMap = new Dictionary<IntPtr, TaskCompletionSource<bool>>();
         private TizenSynchronizationContext context = new TizenSynchronizationContext();
         private static TizenSynchronizationContext s_context = new TizenSynchronizationContext();
 
@@ -298,7 +300,10 @@ namespace Tizen.Network.WiFi
             {
                 throw new ObjectDisposedException("Invalid AP instance (Object may have been disposed or released)");
             }
-            TaskCompletionSource<bool> task = new TaskCompletionSource<bool>();
+
+            TaskCompletionSource<bool> wpsTask = new TaskCompletionSource<bool>();
+            _wpsTaskMap[_apHandle] = wpsTask;
+
             IntPtr id;
             lock (_callback_map)
             {
@@ -309,11 +314,15 @@ namespace Tizen.Network.WiFi
                     if (error != (int)WiFiError.None)
                     {
                         Log.Error(Globals.LogTag, "Error occurs during WiFi connecting, " + (WiFiError)error);
-                        task.SetException(new InvalidOperationException("Error occurs during WiFi connecting, " + (WiFiError)error));
+                        wpsTask.SetException(new InvalidOperationException("Error occurs during WiFi connecting, " + (WiFiError)error));
+                        Log.Info(Globals.LogTag, "Remove task for ConnectWpsAsync");
+                        _wpsTaskMap.Remove(_apHandle);
                     }
                     else
                     {
-                        task.SetResult(true);
+                        wpsTask.SetResult(true);
+                        Log.Info(Globals.LogTag, "Remove task for ConnectWpsAsync");
+                        _wpsTaskMap.Remove(_apHandle);
                     }
                     lock (_callback_map)
                     {
@@ -358,11 +367,13 @@ namespace Tizen.Network.WiFi
                 catch (Exception e)
                 {
                     Log.Error(Globals.LogTag, "Exception on ConnectWpsAsync\n" + e.ToString());
-                    task.SetException(e);
+                    wpsTask.SetException(e);
+                    Log.Info(Globals.LogTag, "Remove task for ConnectWpsAsync");
+                    _wpsTaskMap.Remove(_apHandle);
                 }
             }, null);
 
-            return task.Task;
+            return wpsTask.Task;
         }
 
         /// <summary>
@@ -389,7 +400,7 @@ namespace Tizen.Network.WiFi
         public static Task<WiFiAP> ConnectWpsWithoutSsidAsync(WpsInfo info)
         {
             Log.Info(Globals.LogTag, "ConnectWpsWithoutSsidAsync");
-            TaskCompletionSource<WiFiAP> task = new TaskCompletionSource<WiFiAP>();
+            wpsWithoutSsidTask = new TaskCompletionSource<WiFiAP>();
             IntPtr id;
             lock (s_callbackMap)
             {
@@ -400,12 +411,16 @@ namespace Tizen.Network.WiFi
                     if (error != (int)WiFiError.None)
                     {
                         Log.Error(Globals.LogTag, "Error occurs during WiFi connecting, " + (WiFiError)error);
-                        task.SetException(new InvalidOperationException("Error occurs during WiFi connecting, " + (WiFiError)error));
+                        wpsWithoutSsidTask.SetException(new InvalidOperationException("Error occurs during WiFi connecting, " + (WiFiError)error));
+                        wpsWithoutSsidTask = null;
+                        Log.Info(Globals.LogTag, "task is null");
                     }
                     else
                     {
                         WiFiAP ap = WiFiManagerImpl.Instance.GetConnectedAP();
-                        task.SetResult(ap);
+                        wpsWithoutSsidTask.SetResult(ap);
+                        wpsWithoutSsidTask = null;
+                        Log.Info(Globals.LogTag, "task is null");
                     }
                     lock (s_callbackMap)
                     {
@@ -450,11 +465,13 @@ namespace Tizen.Network.WiFi
                 catch (Exception e)
                 {
                     Log.Error(Globals.LogTag, "Exception on ConnectWpsWithoutSsidAsync\n" + e.ToString());
-                    task.SetException(e);
+                    wpsWithoutSsidTask.SetException(e);
+                    wpsWithoutSsidTask = null;
+                    Log.Info(Globals.LogTag, "task is null");
                 }
             }, null);
 
-            return task.Task;
+            return wpsWithoutSsidTask.Task;
         }
 
         /// <summary>
@@ -478,6 +495,20 @@ namespace Tizen.Network.WiFi
                 Log.Error(Globals.LogTag, "Failed to cancel Wps, Error - " + (WiFiError)ret);
                 WiFiErrorFactory.ThrowWiFiException(ret, WiFiManagerImpl.Instance.GetSafeHandle().DangerousGetHandle());
             }
+
+            // Cancel awaiting tasks
+            if (wpsWithoutSsidTask != null)
+            {
+                Log.Info(Globals.LogTag, "Cancel ConnectWpsWithoutSsidAsync()");
+                wpsWithoutSsidTask.SetCanceled();
+            }
+            foreach (var item in _wpsTaskMap)
+            {
+                Log.Info(Globals.LogTag, "Cancel ConnectWpsAsync() by " + item.Key.GetHashCode());
+                item.Value.SetCanceled();
+            }
+            _wpsTaskMap.Clear();
+
         }