123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Timers;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- using System.Windows.Threading;
- namespace WinUI
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow : Window
- {
- APIHandler handler;
- Regex charRegex = new Regex("[0-9a-fxA-FX]");
- Regex wholeStringRegex = new Regex("^[0-9a-fxA-FX]+$");
- Timer timer = new Timer();
- bool connected = false;
- public MainWindow()
- {
- InitializeComponent();
- if (InitAPIHandler())
- {
- networksPage.SetAPIHandler(handler);
- updateStatus();
- if (!connected)
- {
- MessageBox.Show("Unable to connect to ZeroTier Service.");
- }
- updateNetworks();
- //updatePeers();
- DataObject.AddPastingHandler(joinNetworkID, OnPaste);
- timer.Elapsed += new ElapsedEventHandler(OnUpdateTimer);
- timer.Interval = 2000;
- timer.Enabled = true;
- }
- }
- private bool InitAPIHandler()
- {
- String ztDir = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\ZeroTier\\One";
- String authToken = "";
- Int32 port = 9993;
- try
- {
- byte[] tmp = File.ReadAllBytes(ztDir + "\\authtoken.secret");
- authToken = System.Text.Encoding.ASCII.GetString(tmp).Trim();
- }
- catch
- {
- MessageBox.Show("Unable to read ZeroTier One authtoken.secret from:\r\n" + ztDir, "ZeroTier One");
- this.Close();
- return false;
- }
- if ((authToken == null) || (authToken.Length <= 0))
- {
- MessageBox.Show("Unable to read ZeroTier One authtoken.secret from:\r\n" + ztDir, "ZeroTier One");
- this.Close();
- return false;
- }
- try
- {
- byte[] tmp = File.ReadAllBytes(ztDir + "\\zerotier-one.port");
- port = Int32.Parse(System.Text.Encoding.ASCII.GetString(tmp).Trim());
- if ((port <= 0) || (port > 65535))
- port = 9993;
- }
- catch
- {
- }
- handler = new APIHandler(port, authToken);
- return true;
- }
- private void updateStatus()
- {
- var status = handler.GetStatus();
- if (status != null)
- {
- 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
- {
- 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()
- {
- var networks = handler.GetNetworks();
- networksPage.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
- {
- networksPage.setNetworks(networks);
- }));
- }
- private void updatePeers()
- {
- //var peers = handler.GetPeers();
- //peersPage.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
- //{
- // peersPage.SetPeers(peers);
- //}));
- }
- private void OnUpdateTimer(object source, ElapsedEventArgs e)
- {
- updateStatus();
- updateNetworks();
- //updatePeers();
- }
- private void joinButton_Click(object sender, RoutedEventArgs e)
- {
- if (joinNetworkID.Text.Length < 16)
- {
- MessageBox.Show("Invalid Network ID");
- }
- else
- {
- handler.JoinNetwork(joinNetworkID.Text);
- }
- }
- private void OnNetworkEntered(object sender, TextCompositionEventArgs e)
- {
- e.Handled = !charRegex.IsMatch(e.Text);
- }
- private void OnPaste(object sender, DataObjectPastingEventArgs e)
- {
- var isText = e.SourceDataObject.GetDataPresent(DataFormats.UnicodeText, true);
- if (!isText) return;
- var text = e.SourceDataObject.GetData(DataFormats.UnicodeText) as string;
- if (!wholeStringRegex.IsMatch(text))
- {
- e.CancelCommand();
- }
- }
- }
- }
|