Browse Source

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

Grant Limberg 9 years ago
parent
commit
7b86176d0e

+ 98 - 42
windows/WinUI/APIHandler.cs

@@ -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();
-
-                ZeroTierStatus status = null;
-                try
-                {
-                    status = JsonConvert.DeserializeObject<ZeroTierStatus>(responseText);
-                }
-                catch (JsonReaderException e)
+                var httpResponse = (HttpWebResponse)request.GetResponse();
+                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                 {
-                    Console.WriteLine(e.ToString());
+                    var responseText = streamReader.ReadToEnd();
+
+                    ZeroTierStatus status = null;
+                    try
+                    {
+                        status = JsonConvert.DeserializeObject<ZeroTierStatus>(responseText);
+                    }
+                    catch (JsonReaderException e)
+                    {
+                        Console.WriteLine(e.ToString());
+                    }
+                    return status;
                 }
-                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();
-
-                List<ZeroTierNetwork> networkList = null;
-                try
+                var httpResponse = (HttpWebResponse)request.GetResponse();
+                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                 {
-                    networkList = JsonConvert.DeserializeObject<List<ZeroTierNetwork>>(responseText);
+                    var responseText = streamReader.ReadToEnd();
+
+                    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();
+            try
+            {
+                var httpResponse = (HttpWebResponse)request.GetResponse();
 
-            if (httpResponse.StatusCode != HttpStatusCode.OK)
+                if (httpResponse.StatusCode != HttpStatusCode.OK)
+                {
+                    Console.WriteLine("Error sending join network message");
+                }
+            }
+            catch (System.Net.Sockets.SocketException)
             {
-                Console.WriteLine("Error sending join network message");
+                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();
+            try
+            {
+                var httpResponse = (HttpWebResponse)request.GetResponse();
 
-            if (httpResponse.StatusCode != HttpStatusCode.OK)
+                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)
             {
-                Console.WriteLine("Error sending leave network message");
+                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();
-
-                List<ZeroTierPeer> peerList = null;
-                try
-                {
-                    peerList = JsonConvert.DeserializeObject<List<ZeroTierPeer>>(responseText);
-                }
-                catch (JsonReaderException e)
+                var httpResponse = (HttpWebResponse)request.GetResponse();
+                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                 {
-                    Console.WriteLine(e.ToString());
+                    var responseText = streamReader.ReadToEnd();
+
+                    List<ZeroTierPeer> peerList = null;
+                    try
+                    {
+                        peerList = JsonConvert.DeserializeObject<List<ZeroTierPeer>>(responseText);
+                    }
+                    catch (JsonReaderException e)
+                    {
+                        Console.WriteLine(e.ToString());
+                    }
+                    return peerList;
                 }
-                return peerList;
+            }
+            catch (System.Net.Sockets.SocketException)
+            {
+                return null;
+            }
+            catch (System.Net.WebException)
+            {
+                return null;
             }
         }
     }

+ 39 - 10
windows/WinUI/MainWindow.xaml.cs

@@ -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()

+ 4 - 0
windows/WinUI/NetworksPage.xaml.cs

@@ -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)
             {

+ 3 - 0
windows/WinUI/PeersPage.xaml.cs

@@ -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();