summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrant Limberg <grant.limberg@zerotier.com>2017-05-08 16:17:03 -0700
committerGrant Limberg <grant.limberg@zerotier.com>2017-05-08 16:17:33 -0700
commit73f7088b45e562aa129b32b5a19c2e6b18f0a306 (patch)
tree46d7de7d39e321ff6330fbf20d835169b76c681a
parentb3dd5c0e3a0ea15d7b36546550e3ef6311b56f64 (diff)
downloadinfinitytier-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.cs178
-rw-r--r--windows/WinUI/JoinNetworkView.xaml.cs2
-rw-r--r--windows/WinUI/NetworkInfoView.xaml.cs12
-rw-r--r--windows/WinUI/ToolbarItem.xaml.cs4
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);
}
}
}