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();
{
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)
{
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)
{
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>
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)
{
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)
{
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>
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();
+
}