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.Threading.Tasks;
using System.Net; using System.Net;
using System.IO; using System.IO;
using System.Windows;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace WinUI namespace WinUI
@ -36,21 +37,32 @@ namespace WinUI
request.ContentType = "application/json"; request.ContentType = "application/json";
} }
var httpResponse = (HttpWebResponse)request.GetResponse(); try
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{ {
var responseText = streamReader.ReadToEnd(); var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
ZeroTierStatus status = null; ZeroTierStatus status = null;
try try
{ {
status = JsonConvert.DeserializeObject<ZeroTierStatus>(responseText); status = JsonConvert.DeserializeObject<ZeroTierStatus>(responseText);
}
catch (JsonReaderException e)
{
Console.WriteLine(e.ToString());
}
return status;
} }
catch (JsonReaderException e) }
{ catch (System.Net.Sockets.SocketException)
Console.WriteLine(e.ToString()); {
} return null;
return status; }
catch (System.Net.WebException)
{
return null;
} }
} }
@ -65,21 +77,32 @@ namespace WinUI
request.Method = "GET"; request.Method = "GET";
request.ContentType = "application/json"; request.ContentType = "application/json";
var httpResponse = (HttpWebResponse)request.GetResponse(); try
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{ {
var responseText = streamReader.ReadToEnd(); var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
List<ZeroTierNetwork> networkList = null; List<ZeroTierNetwork> networkList = null;
try try
{ {
networkList = JsonConvert.DeserializeObject<List<ZeroTierNetwork>>(responseText); networkList = JsonConvert.DeserializeObject<List<ZeroTierNetwork>>(responseText);
}
catch (JsonReaderException e)
{
Console.WriteLine(e.ToString());
}
return networkList;
} }
catch (JsonReaderException e) }
{ catch (System.Net.Sockets.SocketException)
Console.WriteLine(e.ToString()); {
} return null;
return networkList; }
catch (System.Net.WebException)
{
return null;
} }
} }
@ -93,11 +116,22 @@ namespace WinUI
request.Method = "POST"; request.Method = "POST";
var httpResponse = (HttpWebResponse)request.GetResponse(); try
if (httpResponse.StatusCode != HttpStatusCode.OK)
{ {
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"; request.Method = "DELETE";
var httpResponse = (HttpWebResponse)request.GetResponse(); try
if (httpResponse.StatusCode != HttpStatusCode.OK)
{ {
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.Method = "GET";
request.ContentType = "application/json"; request.ContentType = "application/json";
var httpResponse = (HttpWebResponse)request.GetResponse(); try
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{ {
var responseText = streamReader.ReadToEnd(); var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
List<ZeroTierPeer> peerList = null; List<ZeroTierPeer> peerList = null;
try try
{ {
peerList = JsonConvert.DeserializeObject<List<ZeroTierPeer>>(responseText); peerList = JsonConvert.DeserializeObject<List<ZeroTierPeer>>(responseText);
}
catch (JsonReaderException e)
{
Console.WriteLine(e.ToString());
}
return peerList;
} }
catch (JsonReaderException e) }
{ catch (System.Net.Sockets.SocketException)
Console.WriteLine(e.ToString()); {
} return null;
return peerList; }
catch (System.Net.WebException)
{
return null;
} }
} }
} }

View file

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

View file

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

View file

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