using System; using System.Collections.Generic; using System.Linq; using System.Text; 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; namespace WinUI { /// /// Interaction logic for NetworkInfoView.xaml /// public partial class NetworkInfoView : UserControl { public ZeroTierNetwork network; public NetworkInfoView(ZeroTierNetwork network) { InitializeComponent(); this.network = network; UpdateNetworkData(); allowDefault.Checked += AllowDefault_CheckStateChanged; allowDefault.Unchecked += AllowDefault_CheckStateChanged; allowGlobal.Checked += AllowGlobal_CheckStateChanged; allowGlobal.Unchecked += AllowGlobal_CheckStateChanged; allowManaged.Checked += AllowManaged_CheckStateChanged; allowManaged.Unchecked += AllowManaged_CheckStateChanged; allowDNS.Checked += AllowDNS_CheckStateChanged; allowDNS.Unchecked += AllowDNS_CheckStateChanged; } private void UpdateNetworkData() { if (this.networkId.Text != network.NetworkId) this.networkId.Text = network.NetworkId; if (this.networkName.Text != network.NetworkName) this.networkName.Text = network.NetworkName; if (this.networkStatus.Text != network.NetworkStatus) this.networkStatus.Text = network.NetworkStatus; if (this.networkType.Text != network.NetworkType) this.networkType.Text = network.NetworkType; if (this.macAddress.Text != network.MacAddress) this.macAddress.Text = network.MacAddress; if (this.mtu.Text != network.MTU.ToString()) this.mtu.Text = network.MTU.ToString(); this.broadcastEnabled.Text = (network.BroadcastEnabled ? "ENABLED" : "DISABLED"); this.bridgingEnabled.Text = (network.Bridge ? "ENABLED" : "DISABLED"); if (this.deviceName.Text != network.DeviceName) this.deviceName.Text = network.DeviceName; string iplist = ""; for (int i = 0; i < network.AssignedAddresses.Length; ++i) { iplist += network.AssignedAddresses[i]; if (i < (network.AssignedAddresses.Length - 1)) iplist += "\n"; } if (this.managedIps.Text != iplist) this.managedIps.Text = iplist; this.allowDefault.IsChecked = network.AllowDefault; this.allowGlobal.IsChecked = network.AllowGlobal; this.allowManaged.IsChecked = network.AllowManaged; this.allowDNS.IsChecked = network.AllowDNS; this.connectedCheckBox.Checked -= connectedCheckBox_Checked; this.connectedCheckBox.Unchecked -= connectedCheckbox_Unchecked; this.connectedCheckBox.IsChecked = network.IsConnected; this.connectedCheckBox.Checked += connectedCheckBox_Checked; this.connectedCheckBox.Unchecked += connectedCheckbox_Unchecked; } public bool HasNetwork(ZeroTierNetwork network) { if (this.network.NetworkId.Equals(network.NetworkId)) return true; return false; } public void SetNetworkInfo(ZeroTierNetwork network) { this.network = network; UpdateNetworkData(); } private void deleteButton_Click(object sender, RoutedEventArgs e) { APIHandler.Instance.LeaveNetwork(this.Dispatcher, network.NetworkId); NetworkMonitor.Instance.RemoveNetwork(network.NetworkId); } private void AllowManaged_CheckStateChanged(object sender, RoutedEventArgs e) { CheckBox cb = sender as CheckBox; APIHandler.Instance.JoinNetwork(this.Dispatcher, network.NetworkId, allowManaged.IsChecked ?? false, allowGlobal.IsChecked ?? false, allowDefault.IsChecked ?? false, allowDNS.IsChecked ?? false); } private void AllowGlobal_CheckStateChanged(object sender, RoutedEventArgs e) { CheckBox cb = sender as CheckBox; APIHandler.Instance.JoinNetwork(this.Dispatcher, network.NetworkId, allowManaged.IsChecked ?? false, allowGlobal.IsChecked ?? false, allowDefault.IsChecked ?? false, allowDNS.IsChecked ?? false); } private void AllowDefault_CheckStateChanged(object sender, RoutedEventArgs e) { CheckBox cb = sender as CheckBox; APIHandler.Instance.JoinNetwork(this.Dispatcher, network.NetworkId, allowManaged.IsChecked ?? false, allowGlobal.IsChecked ?? false, allowDefault.IsChecked ?? false, allowDNS.IsChecked ?? false); } private void AllowDNS_CheckStateChanged(object sender, RoutedEventArgs e) { CheckBox cb = sender as CheckBox; APIHandler.Instance.JoinNetwork(this.Dispatcher, network.NetworkId, allowManaged.IsChecked ?? false, allowGlobal.IsChecked ?? false, allowDefault.IsChecked ?? false, allowDNS.IsChecked ?? false); } private void connectedCheckBox_Checked(object sender, RoutedEventArgs e) { onConnectedCheckboxUpdated(true); } private void connectedCheckbox_Unchecked(object sender, RoutedEventArgs e) { onConnectedCheckboxUpdated(false); } private void onConnectedCheckboxUpdated(bool isChecked) { if (isChecked) { bool global = allowGlobal.IsChecked.Value; bool managed = allowManaged.IsChecked.Value; bool defRoute = allowDefault.IsChecked.Value; bool dns = allowDNS.IsChecked.Value; APIHandler.Instance.JoinNetwork(this.Dispatcher, networkId.Text, managed, global, defRoute, dns); } else { APIHandler.Instance.LeaveNetwork(this.Dispatcher, networkId.Text); } } } }