diff options
author | Grant Limberg <grant.limberg@zerotier.com> | 2017-05-08 16:17:03 -0700 |
---|---|---|
committer | Grant Limberg <grant.limberg@zerotier.com> | 2017-05-08 16:17:33 -0700 |
commit | 73f7088b45e562aa129b32b5a19c2e6b18f0a306 (patch) | |
tree | 46d7de7d39e321ff6330fbf20d835169b76c681a | |
parent | b3dd5c0e3a0ea15d7b36546550e3ef6311b56f64 (diff) | |
download | infinitytier-73f7088b45e562aa129b32b5a19c2e6b18f0a306.tar.gz infinitytier-73f7088b45e562aa129b32b5a19c2e6b18f0a306.zip |
Run Join/Leave commands asynchronously so the UI doesn't lock up on thoise commands
-rw-r--r-- | windows/WinUI/APIHandler.cs | 178 | ||||
-rw-r--r-- | windows/WinUI/JoinNetworkView.xaml.cs | 2 | ||||
-rw-r--r-- | windows/WinUI/NetworkInfoView.xaml.cs | 12 | ||||
-rw-r--r-- | windows/WinUI/ToolbarItem.xaml.cs | 4 |
4 files changed, 109 insertions, 87 deletions
diff --git a/windows/WinUI/APIHandler.cs b/windows/WinUI/APIHandler.cs index 1b1ca1d7..80515e5b 100644 --- a/windows/WinUI/APIHandler.cs +++ b/windows/WinUI/APIHandler.cs @@ -8,6 +8,7 @@ using System.IO; using System.Windows; using Newtonsoft.Json; using System.Diagnostics; +using System.Windows.Threading; namespace WinUI { @@ -264,104 +265,125 @@ namespace WinUI } } - public void JoinNetwork(string nwid, bool allowManaged = true, bool allowGlobal = false, bool allowDefault = false) + public void JoinNetwork(Dispatcher d, string nwid, bool allowManaged = true, bool allowGlobal = false, bool allowDefault = false) { - var request = WebRequest.Create(url + "/network/" + nwid + "?auth=" + authtoken) as HttpWebRequest; - if (request == null) - { - return; - } - - request.Method = "POST"; - request.ContentType = "applicaiton/json"; - request.Timeout = 10000; - try + Task.Factory.StartNew(() => { - using (var streamWriter = new StreamWriter(((HttpWebRequest)request).GetRequestStream())) + var request = WebRequest.Create(url + "/network/" + nwid + "?auth=" + authtoken) as HttpWebRequest; + if (request == null) { - string json = "{\"allowManaged\":" + (allowManaged ? "true" : "false") + "," + - "\"allowGlobal\":" + (allowGlobal ? "true" : "false") + "," + - "\"allowDefault\":" + (allowDefault ? "true" : "false") + "}"; - streamWriter.Write(json); - streamWriter.Flush(); - streamWriter.Close(); + return; } - } - catch (System.Net.WebException) - { - MessageBox.Show("Error Joining Network: Cannot connect to ZeroTier service."); - return; - } - try - { - var httpResponse = (HttpWebResponse)request.GetResponse(); + request.Method = "POST"; + request.ContentType = "applicaiton/json"; + request.Timeout = 30000; + try + { + using (var streamWriter = new StreamWriter(((HttpWebRequest)request).GetRequestStream())) + { + string json = "{\"allowManaged\":" + (allowManaged ? "true" : "false") + "," + + "\"allowGlobal\":" + (allowGlobal ? "true" : "false") + "," + + "\"allowDefault\":" + (allowDefault ? "true" : "false") + "}"; + streamWriter.Write(json); + streamWriter.Flush(); + streamWriter.Close(); + } + } + catch (System.Net.WebException) + { + d.BeginInvoke(DispatcherPriority.Normal, new Action(() => + { + MessageBox.Show("Error Joining Network: Cannot connect to ZeroTier service."); + })); + return; + } - if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) + try { - APIHandler.initHandler(true); + var httpResponse = (HttpWebResponse)request.GetResponse(); + + if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) + { + APIHandler.initHandler(true); + } + else if (httpResponse.StatusCode != HttpStatusCode.OK) + { + Console.WriteLine("Error sending join network message"); + } } - else if (httpResponse.StatusCode != HttpStatusCode.OK) - { - Console.WriteLine("Error sending join network message"); - } - } - catch (System.Net.Sockets.SocketException) - { - MessageBox.Show("Error Joining Network: Cannot connect to ZeroTier service."); - } - catch (System.Net.WebException e) - { - HttpWebResponse res = (HttpWebResponse)e.Response; - if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) + catch (System.Net.Sockets.SocketException) { - APIHandler.initHandler(true); + d.BeginInvoke(DispatcherPriority.Normal, new Action(() => + { + MessageBox.Show("Error Joining Network: Cannot connect to ZeroTier service."); + })); } - MessageBox.Show("Error Joining Network: Cannot connect to ZeroTier service."); - } + catch (System.Net.WebException e) + { + HttpWebResponse res = (HttpWebResponse)e.Response; + if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) + { + APIHandler.initHandler(true); + } + d.BeginInvoke(DispatcherPriority.Normal, new Action(() => + { + MessageBox.Show("Error Joining Network: Cannot connect to ZeroTier service."); + })); + } + }); } - public void LeaveNetwork(string nwid) + public void LeaveNetwork(Dispatcher d, string nwid) { - var request = WebRequest.Create(url + "/network/" + nwid + "?auth=" + authtoken) as HttpWebRequest; - if (request == null) - { - return; - } + Task.Factory.StartNew(() => + { + var request = WebRequest.Create(url + "/network/" + nwid + "?auth=" + authtoken) as HttpWebRequest; + if (request == null) + { + return; + } - request.Method = "DELETE"; - request.Timeout = 10000; + request.Method = "DELETE"; + request.Timeout = 30000; - try - { - var httpResponse = (HttpWebResponse)request.GetResponse(); + try + { + var httpResponse = (HttpWebResponse)request.GetResponse(); - if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) + if (httpResponse.StatusCode == HttpStatusCode.Unauthorized) + { + APIHandler.initHandler(true); + } + else if (httpResponse.StatusCode != HttpStatusCode.OK) + { + Console.WriteLine("Error sending leave network message"); + } + } + catch (System.Net.Sockets.SocketException) { - APIHandler.initHandler(true); + d.BeginInvoke(DispatcherPriority.Normal, new Action(() => + { + MessageBox.Show("Error Leaving Network: Cannot connect to ZeroTier service."); + })); } - else if (httpResponse.StatusCode != HttpStatusCode.OK) - { - Console.WriteLine("Error sending leave network message"); - } - } - catch (System.Net.Sockets.SocketException) - { - MessageBox.Show("Error Leaving Network: Cannot connect to ZeroTier service."); - } - catch (System.Net.WebException e) - { - HttpWebResponse res = (HttpWebResponse)e.Response; - if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) + catch (System.Net.WebException e) { - APIHandler.initHandler(true); + HttpWebResponse res = (HttpWebResponse)e.Response; + if (res != null && res.StatusCode == HttpStatusCode.Unauthorized) + { + APIHandler.initHandler(true); + } + d.BeginInvoke(DispatcherPriority.Normal, new Action(() => + { + MessageBox.Show("Error Leaving Network: Cannot connect to ZeroTier service."); + })); } - MessageBox.Show("Error Leaving Network: Cannot connect to ZeroTier service."); - } - catch - { - Console.WriteLine("Error leaving network: Unknown error"); - } + catch + { + Console.WriteLine("Error leaving network: Unknown error"); + } + }); } public delegate void PeersCallback(List<ZeroTierPeer> peers); diff --git a/windows/WinUI/JoinNetworkView.xaml.cs b/windows/WinUI/JoinNetworkView.xaml.cs index 548a51e6..0b4ac324 100644 --- a/windows/WinUI/JoinNetworkView.xaml.cs +++ b/windows/WinUI/JoinNetworkView.xaml.cs @@ -118,7 +118,7 @@ namespace WinUI bool allowGlobal = allowGlobalCheckbox.IsChecked.Value; bool allowManaged = allowManagedCheckbox.IsChecked.Value; - APIHandler.Instance.JoinNetwork(joinNetworkBox.Text, allowManaged, allowGlobal, allowDefault); + APIHandler.Instance.JoinNetwork(this.Dispatcher, joinNetworkBox.Text, allowManaged, allowGlobal, allowDefault); Close(); } diff --git a/windows/WinUI/NetworkInfoView.xaml.cs b/windows/WinUI/NetworkInfoView.xaml.cs index 1f99a1fe..51f76753 100644 --- a/windows/WinUI/NetworkInfoView.xaml.cs +++ b/windows/WinUI/NetworkInfoView.xaml.cs @@ -106,14 +106,14 @@ namespace WinUI private void deleteButton_Click(object sender, RoutedEventArgs e) { - APIHandler.Instance.LeaveNetwork(network.NetworkId); + APIHandler.Instance.LeaveNetwork(this.Dispatcher, network.NetworkId); NetworkMonitor.Instance.RemoveNetwork(network.NetworkId); } private void AllowManaged_CheckStateChanged(object sender, RoutedEventArgs e) { CheckBox cb = sender as CheckBox; - APIHandler.Instance.JoinNetwork(network.NetworkId, + APIHandler.Instance.JoinNetwork(this.Dispatcher, network.NetworkId, allowManaged.IsChecked ?? false, allowGlobal.IsChecked ?? false, allowDefault.IsChecked ?? false); @@ -122,7 +122,7 @@ namespace WinUI private void AllowGlobal_CheckStateChanged(object sender, RoutedEventArgs e) { CheckBox cb = sender as CheckBox; - APIHandler.Instance.JoinNetwork(network.NetworkId, + APIHandler.Instance.JoinNetwork(this.Dispatcher, network.NetworkId, allowManaged.IsChecked ?? false, allowGlobal.IsChecked ?? false, allowDefault.IsChecked ?? false); @@ -131,7 +131,7 @@ namespace WinUI private void AllowDefault_CheckStateChanged(object sender, RoutedEventArgs e) { CheckBox cb = sender as CheckBox; - APIHandler.Instance.JoinNetwork(network.NetworkId, + APIHandler.Instance.JoinNetwork(this.Dispatcher, network.NetworkId, allowManaged.IsChecked ?? false, allowGlobal.IsChecked ?? false, allowDefault.IsChecked ?? false); @@ -155,11 +155,11 @@ namespace WinUI bool managed = allowManaged.IsChecked.Value; bool defRoute = allowDefault.IsChecked.Value; - APIHandler.Instance.JoinNetwork(networkId.Text, managed, global, defRoute); + APIHandler.Instance.JoinNetwork(this.Dispatcher, networkId.Text, managed, global, defRoute); } else { - APIHandler.Instance.LeaveNetwork(networkId.Text); + APIHandler.Instance.LeaveNetwork(this.Dispatcher, networkId.Text); } } } diff --git a/windows/WinUI/ToolbarItem.xaml.cs b/windows/WinUI/ToolbarItem.xaml.cs index 29791a4e..1b5a588c 100644 --- a/windows/WinUI/ToolbarItem.xaml.cs +++ b/windows/WinUI/ToolbarItem.xaml.cs @@ -269,11 +269,11 @@ namespace WinUI ZeroTierNetwork network = item.DataContext as ZeroTierNetwork; if (item.IsChecked) { - APIHandler.Instance.LeaveNetwork(network.NetworkId); + APIHandler.Instance.LeaveNetwork(this.Dispatcher, network.NetworkId); } else { - APIHandler.Instance.JoinNetwork(network.NetworkId, network.AllowManaged, network.AllowGlobal, network.AllowDefault); + APIHandler.Instance.JoinNetwork(this.Dispatcher, network.NetworkId, network.AllowManaged, network.AllowGlobal, network.AllowDefault); } } } |