Don't go kaboom when the ZeroTier service isn't running.

This commit is contained in:
Grant Limberg 2015-11-04 18:28:07 -08:00
parent a95ff21aaf
commit 7b86176d0e
4 changed files with 146 additions and 54 deletions

View File

@ -5,6 +5,7 @@ using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Windows;
using Newtonsoft.Json;
namespace WinUI
@ -36,21 +37,32 @@ namespace WinUI
request.ContentType = "application/json";
}
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
try
{
var responseText = streamReader.ReadToEnd();
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
ZeroTierStatus status = null;
try
{
status = JsonConvert.DeserializeObject<ZeroTierStatus>(responseText);
ZeroTierStatus status = null;
try
{
status = JsonConvert.DeserializeObject<ZeroTierStatus>(responseText);
}
catch (JsonReaderException e)
{
Console.WriteLine(e.ToString());
}
return status;
}
catch (JsonReaderException e)
{
Console.WriteLine(e.ToString());
}
return status;
}
catch (System.Net.Sockets.SocketException)
{
return null;
}
catch (System.Net.WebException)
{
return null;
}
}
@ -65,21 +77,32 @@ namespace WinUI
request.Method = "GET";
request.ContentType = "application/json";
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
try
{
var responseText = streamReader.ReadToEnd();
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
List<ZeroTierNetwork> networkList = null;
try
{
networkList = JsonConvert.DeserializeObject<List<ZeroTierNetwork>>(responseText);
List<ZeroTierNetwork> networkList = null;
try
{
networkList = JsonConvert.DeserializeObject<List<ZeroTierNetwork>>(responseText);
}
catch (JsonReaderException e)
{
Console.WriteLine(e.ToString());
}
return networkList;
}
catch (JsonReaderException e)
{
Console.WriteLine(e.ToString());
}
return networkList;
}
catch (System.Net.Sockets.SocketException)
{
return null;
}
catch (System.Net.WebException)
{
return null;
}
}
@ -93,11 +116,22 @@ namespace WinUI
request.Method = "POST";
var httpResponse = (HttpWebResponse)request.GetResponse();
if (httpResponse.StatusCode != HttpStatusCode.OK)
try
{
Console.WriteLine("Error sending join network message");
var httpResponse = (HttpWebResponse)request.GetResponse();
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)
{
MessageBox.Show("Error Joining Network: Cannot connect to ZeroTier service.");
}
}
@ -111,11 +145,22 @@ namespace WinUI
request.Method = "DELETE";
var httpResponse = (HttpWebResponse)request.GetResponse();
if (httpResponse.StatusCode != HttpStatusCode.OK)
try
{
Console.WriteLine("Error sending leave network message");
var httpResponse = (HttpWebResponse)request.GetResponse();
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)
{
MessageBox.Show("Error Leaving Network: Cannot connect to ZeroTier service.");
}
}
@ -130,21 +175,32 @@ namespace WinUI
request.Method = "GET";
request.ContentType = "application/json";
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
try
{
var responseText = streamReader.ReadToEnd();
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
List<ZeroTierPeer> peerList = null;
try
{
peerList = JsonConvert.DeserializeObject<List<ZeroTierPeer>>(responseText);
List<ZeroTierPeer> peerList = null;
try
{
peerList = JsonConvert.DeserializeObject<List<ZeroTierPeer>>(responseText);
}
catch (JsonReaderException e)
{
Console.WriteLine(e.ToString());
}
return peerList;
}
catch (JsonReaderException e)
{
Console.WriteLine(e.ToString());
}
return peerList;
}
catch (System.Net.Sockets.SocketException)
{
return null;
}
catch (System.Net.WebException)
{
return null;
}
}
}

View File

@ -29,6 +29,8 @@ namespace WinUI
Timer timer = new Timer();
bool connected = false;
public MainWindow()
{
InitializeComponent();
@ -36,6 +38,11 @@ namespace WinUI
networksPage.SetAPIHandler(handler);
updateStatus();
if (!connected)
{
MessageBox.Show("Unable to connect to ZeroTier Service.");
}
updateNetworks();
updatePeers();
@ -50,18 +57,40 @@ namespace WinUI
{
var status = handler.GetStatus();
networkId.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
this.networkId.Content = status.Address;
}));
versionString.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
if (status != null)
{
this.versionString.Content = status.Version;
}));
onlineStatus.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
connected = true;
networkId.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
this.networkId.Content = status.Address;
}));
versionString.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
this.versionString.Content = status.Version;
}));
onlineStatus.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
this.onlineStatus.Content = (status.Online ? "ONLINE" : "OFFLINE");
}));
}
else
{
this.onlineStatus.Content = (status.Online ? "ONLINE" : "OFFLINE");
}));
connected = false;
networkId.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
this.networkId.Content = "";
}));
versionString.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
this.versionString.Content = "0";
}));
onlineStatus.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
this.onlineStatus.Content = "OFFLINE";
}));
}
}
private void updateNetworks()

View File

@ -35,6 +35,10 @@ namespace WinUI
public void setNetworks(List<ZeroTierNetwork> networks)
{
this.wrapPanel.Children.Clear();
if (networks == null)
{
return;
}
for (int i = 0; i < networks.Count; ++i)
{

View File

@ -31,6 +31,9 @@ namespace WinUI
public void SetPeers(List<ZeroTierPeer> peerList)
{
if (peerList == null)
return;
this.peersList = peerList;
dataGrid.ItemsSource = this.peersList;
dataGrid.Items.Refresh();