From: chleun-moon <32117100+chleun-moon@users.noreply.github.com> Date: Thu, 28 Jun 2018 06:39:40 +0000 (+0900) Subject: [WiFi] Cancel tasks for WPS connection in CancelWps() (#315) X-Git-Tag: 5.0.0.14562~171 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b9b8b2abfa95db9de6842ae47d29123f29d2ef1e;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git [WiFi] Cancel tasks for WPS connection in CancelWps() (#315) * [WiFi] Cancel tasks for WPS connection in CancelWps() * [WiFi] Remove logs --- diff --git a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAP.cs b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAP.cs index 6715646..17b3b70 100644 --- a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAP.cs +++ b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiAP.cs @@ -36,6 +36,8 @@ namespace Tizen.Network.WiFi private WiFiSecurity _security; private bool _disposed = false; + private static TaskCompletionSource wpsWithoutSsidTask = null; + private static Dictionary> _wpsTaskMap = new Dictionary>(); 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 task = new TaskCompletionSource(); + + TaskCompletionSource wpsTask = new TaskCompletionSource(); + _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; } /// @@ -389,7 +400,7 @@ namespace Tizen.Network.WiFi public static Task ConnectWpsWithoutSsidAsync(WpsInfo info) { Log.Info(Globals.LogTag, "ConnectWpsWithoutSsidAsync"); - TaskCompletionSource task = new TaskCompletionSource(); + wpsWithoutSsidTask = new TaskCompletionSource(); 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; } /// @@ -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(); + }