Prechádzať zdrojové kódy

turn APIHandler into a singleton

Grant Limberg 8 rokov pred
rodič
commit
e1f9f7b6dc

+ 90 - 1
windows/WinUI/APIHandler.cs

@@ -7,6 +7,7 @@ using System.Net;
 using System.IO;
 using System.Windows;
 using Newtonsoft.Json;
+using System.Diagnostics;
 
 namespace WinUI
 {
@@ -18,7 +19,95 @@ namespace WinUI
 
         private string url = null;
 
-        public APIHandler()
+        private static APIHandler instance;
+
+        public static APIHandler Instance
+        {
+            get
+            {
+                if (instance == null)
+                {
+
+                }
+
+                return instance;
+            }
+        }
+
+        private static bool initHandler()
+        {
+            String localZtDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\ZeroTier\\One";
+            String globalZtDir = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\ZeroTier\\One";
+
+            String authToken = "";
+            Int32 port = 9993;
+
+            if (!File.Exists(localZtDir + "\\authtoken.secret") || !File.Exists(localZtDir + "\\zerotier-one.port"))
+            {
+                // launch external process to copy file into place
+                String curPath = System.Reflection.Assembly.GetEntryAssembly().Location;
+                int index = curPath.LastIndexOf("\\");
+                curPath = curPath.Substring(0, index);
+                ProcessStartInfo startInfo = new ProcessStartInfo(curPath + "\\copyutil.exe", globalZtDir + " " + localZtDir);
+                startInfo.Verb = "runas";
+
+
+                var process = Process.Start(startInfo);
+                process.WaitForExit();
+            }
+
+            authToken = readAuthToken(localZtDir + "\\authtoken.secret");
+
+            if ((authToken == null) || (authToken.Length <= 0))
+            {
+                MessageBox.Show("Unable to read ZeroTier One authtoken", "ZeroTier One");
+                return false;
+            }
+
+            port = readPort(localZtDir + "\\zerotier-one.port");
+            instance = new APIHandler(port, authToken);
+            return true;
+        }
+
+        private static String readAuthToken(String path)
+        {
+            String authToken = "";
+
+            if (File.Exists(path))
+            {
+                try
+                {
+                    byte[] tmp = File.ReadAllBytes(path);
+                    authToken = System.Text.Encoding.UTF8.GetString(tmp).Trim();
+                }
+                catch
+                {
+                    MessageBox.Show("Unable to read ZeroTier One Auth Token from:\r\n" + path, "ZeroTier One");
+                }
+            }
+
+            return authToken;
+        }
+
+        private static Int32 readPort(String path)
+        {
+            Int32 port = 9993;
+
+            try
+            {
+                byte[] tmp = File.ReadAllBytes(path);
+                port = Int32.Parse(System.Text.Encoding.ASCII.GetString(tmp).Trim());
+                if ((port <= 0) || (port > 65535))
+                    port = 9993;
+            }
+            catch
+            {
+            }
+
+            return port;
+        }
+
+        private APIHandler()
         {
             url = "http://127.0.0.1:9993";
         }

+ 1 - 84
windows/WinUI/ToolbarItem.xaml.cs

@@ -24,94 +24,11 @@ namespace WinUI
     /// </summary>
     public partial class ToolbarItem : Window
     {
-        APIHandler handler;
+        APIHandler handler = APIHandler.Instance;
 
         public ToolbarItem()
         {
             InitializeComponent();
-
-            if (InitAPIHandler())
-            {
-
-            }
-            else
-            {
-                MessageBox.Show("ZeroTier API Initialization Failed");
-            }
-        }
-
-        private String readAuthToken(String path)
-        {
-            String authToken = "";
-
-            if (File.Exists(path))
-            {
-                try
-                {
-                    byte[] tmp = File.ReadAllBytes(path);
-                    authToken = System.Text.Encoding.UTF8.GetString(tmp).Trim();
-                }
-                catch
-                {
-                    MessageBox.Show("Unable to read ZeroTier One Auth Token from:\r\n" + path, "ZeroTier One");
-                }
-            }
-
-            return authToken;
-        }
-
-        private Int32 readPort(String path)
-        {
-            Int32 port = 9993;
-
-            try
-            {
-                byte[] tmp = File.ReadAllBytes(path);
-                port = Int32.Parse(System.Text.Encoding.ASCII.GetString(tmp).Trim());
-                if ((port <= 0) || (port > 65535))
-                    port = 9993;
-            }
-            catch
-            {
-            }
-
-            return port;
-        }
-
-        private bool InitAPIHandler()
-        {
-            String localZtDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\ZeroTier\\One";
-            String globalZtDir = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\ZeroTier\\One";
-
-            String authToken = "";
-            Int32 port = 9993;
-
-            if (!File.Exists(localZtDir + "\\authtoken.secret") || !File.Exists(localZtDir + "\\zerotier-one.port"))
-            {
-                // launch external process to copy file into place
-                String curPath = System.Reflection.Assembly.GetEntryAssembly().Location;
-                int index = curPath.LastIndexOf("\\");
-                curPath = curPath.Substring(0, index);
-                ProcessStartInfo startInfo = new ProcessStartInfo(curPath + "\\copyutil.exe", globalZtDir + " " + localZtDir);
-                startInfo.Verb = "runas";
-
-
-                var process = Process.Start(startInfo);
-                process.WaitForExit();
-            }
-
-            authToken = readAuthToken(localZtDir + "\\authtoken.secret");
-
-            if ((authToken == null) || (authToken.Length <= 0))
-            {
-                MessageBox.Show("Unable to read ZeroTier One authtoken", "ZeroTier One");
-                this.Close();
-                return false;
-            }
-
-            port = readPort(localZtDir + "\\zerotier-one.port");
-            handler = new APIHandler(port, authToken);
-            return true;
         }
 
         private void ToolbarItem_TrayContextMenuOpen(object sender, System.Windows.RoutedEventArgs e)