mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-05 03:53:44 +02:00
Wired up connected checkbox and delete button. just something not working with refresh.
This commit is contained in:
parent
dbe1461886
commit
e48d6880c9
6 changed files with 98 additions and 153 deletions
|
@ -25,10 +25,6 @@ namespace WinUI
|
||||||
public delegate void NetworkListCallback(List<ZeroTierNetwork> networks);
|
public delegate void NetworkListCallback(List<ZeroTierNetwork> networks);
|
||||||
public delegate void StatusCallback(ZeroTierStatus status);
|
public delegate void StatusCallback(ZeroTierStatus status);
|
||||||
|
|
||||||
|
|
||||||
private NetworkListCallback _networkCallbacks;
|
|
||||||
private StatusCallback _statusCallbacks;
|
|
||||||
|
|
||||||
public static APIHandler Instance
|
public static APIHandler Instance
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -187,7 +183,7 @@ namespace WinUI
|
||||||
|
|
||||||
request.Method = "GET";
|
request.Method = "GET";
|
||||||
request.ContentType = "application/json";
|
request.ContentType = "application/json";
|
||||||
request.Timeout = 2000;
|
request.Timeout = 10000;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -233,7 +229,7 @@ namespace WinUI
|
||||||
|
|
||||||
request.Method = "POST";
|
request.Method = "POST";
|
||||||
request.ContentType = "applicaiton/json";
|
request.ContentType = "applicaiton/json";
|
||||||
request.Timeout = 2000;
|
request.Timeout = 10000;
|
||||||
|
|
||||||
using (var streamWriter = new StreamWriter(((HttpWebRequest)request).GetRequestStream()))
|
using (var streamWriter = new StreamWriter(((HttpWebRequest)request).GetRequestStream()))
|
||||||
{
|
{
|
||||||
|
@ -273,7 +269,7 @@ namespace WinUI
|
||||||
}
|
}
|
||||||
|
|
||||||
request.Method = "DELETE";
|
request.Method = "DELETE";
|
||||||
request.Timeout = 2000;
|
request.Timeout = 10000;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -73,9 +73,12 @@
|
||||||
|
|
||||||
<Grid Grid.Column="0" Grid.Row="14" Grid.ColumnSpan="3" Background="GhostWhite">
|
<Grid Grid.Column="0" Grid.Row="14" Grid.ColumnSpan="3" Background="GhostWhite">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="auto"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="auto"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Button x:Name="leaveButton" Content="Leave" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="75" Background="#FFFFB354" Click="leaveButton_Click"/>
|
<Button x:Name="deleteButton" Grid.Column="0" Content="Delete" HorizontalAlignment="Left" VerticalAlignment="Center" Width="75" Background="#FFFFB354" Click="deleteButton_Click"/>
|
||||||
|
<CheckBox x:Name="connectedCheckBox" Grid.Column="2" Content="Connected" HorizontalAlignment="Right" VerticalAlignment="Center" Checked="connectedCheckBox_Checked" Unchecked="connectedCheckbox_Unchecked"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
|
@ -79,6 +79,8 @@ namespace WinUI
|
||||||
this.allowDefault.IsChecked = network.AllowDefault;
|
this.allowDefault.IsChecked = network.AllowDefault;
|
||||||
this.allowGlobal.IsChecked = network.AllowGlobal;
|
this.allowGlobal.IsChecked = network.AllowGlobal;
|
||||||
this.allowManaged.IsChecked = network.AllowManaged;
|
this.allowManaged.IsChecked = network.AllowManaged;
|
||||||
|
|
||||||
|
this.connectedCheckBox.IsChecked = network.IsConnected;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool HasNetwork(ZeroTierNetwork network)
|
public bool HasNetwork(ZeroTierNetwork network)
|
||||||
|
@ -96,9 +98,10 @@ namespace WinUI
|
||||||
UpdateNetworkData();
|
UpdateNetworkData();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void leaveButton_Click(object sender, RoutedEventArgs e)
|
private void deleteButton_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
APIHandler.Instance.LeaveNetwork(network.NetworkId);
|
APIHandler.Instance.LeaveNetwork(network.NetworkId);
|
||||||
|
NetworkMonitor.Instance.RemoveNetwork(network.NetworkId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AllowManaged_CheckStateChanged(object sender, RoutedEventArgs e)
|
private void AllowManaged_CheckStateChanged(object sender, RoutedEventArgs e)
|
||||||
|
@ -127,5 +130,31 @@ namespace WinUI
|
||||||
allowGlobal.IsChecked ?? false,
|
allowGlobal.IsChecked ?? false,
|
||||||
allowDefault.IsChecked ?? false);
|
allowDefault.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;
|
||||||
|
|
||||||
|
APIHandler.Instance.JoinNetwork(networkId.Text, managed, global, defRoute);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
APIHandler.Instance.LeaveNetwork(networkId.Text);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,60 +75,14 @@
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
|
|
||||||
<DockPanel>
|
<DockPanel>
|
||||||
<StatusBar DockPanel.Dock="Bottom" Height="26" Background="#FF234447" Margin="0">
|
<Grid Background="LightGray" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
|
||||||
<StatusBar.ItemsPanel>
|
<Grid.ColumnDefinitions>
|
||||||
<ItemsPanelTemplate>
|
<ColumnDefinition Width="*"/>
|
||||||
<Grid>
|
</Grid.ColumnDefinitions>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="*"/>
|
<RowDefinition Height="*"/>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Grid.ColumnDefinitions>
|
<local:NetworksPage x:Name="networksPage" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="0" Grid.Row="0" Margin="0,0,0,0"/>
|
||||||
<ColumnDefinition Width="Auto"/>
|
</Grid>
|
||||||
<ColumnDefinition Width="Auto"/>
|
|
||||||
<ColumnDefinition Width="Auto"/>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
<ColumnDefinition Width="Auto"/>
|
|
||||||
<ColumnDefinition Width="Auto"/>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
</Grid>
|
|
||||||
</ItemsPanelTemplate>
|
|
||||||
</StatusBar.ItemsPanel>
|
|
||||||
<StatusBarItem Grid.Column="0" x:Name="networkId_placeholder">
|
|
||||||
<TextBox x:Name="networkId" Text="deadbeef00" HorizontalAlignment="Left" Grid.Column="0" Foreground="White" FontFamily="Lucida Console" BorderThickness="0" IsReadOnly="true" Background="Transparent"/>
|
|
||||||
</StatusBarItem>
|
|
||||||
<StatusBarItem Grid.Column="1" x:Name="onlineStatus" Content="ONLINE" Foreground="White" FontFamily="Lucida Console"/>
|
|
||||||
<StatusBarItem Grid.Column="2" x:Name="versionString" Content="1.0.5" Foreground="White" FontFamily="Lucida Console"/>
|
|
||||||
<StatusBarItem Grid.Column="3" x:Name="blank" Content="" Height="43" Foreground="White"/>
|
|
||||||
<StatusBarItem Grid.Column="4">
|
|
||||||
<TextBox x:Name="joinNetworkID" TextWrapping="Wrap" Width="140" HorizontalAlignment="Right" ToolTip="Enter Network ID" PreviewTextInput="OnNetworkEntered" MaxLength="16" FontFamily="Lucida Console" FontSize="12" BorderThickness="1"/>
|
|
||||||
</StatusBarItem>
|
|
||||||
<StatusBarItem Grid.Column="5" x:Name="statusBarButton" Foreground="White" RenderTransformOrigin="0.789,0.442">
|
|
||||||
<Button x:Name="joinButton" Content="Join" Background="#FFFFB354" Width="76" Click="joinButton_Click"/>
|
|
||||||
</StatusBarItem>
|
|
||||||
</StatusBar>
|
|
||||||
<!--<TabControl Margin="0,0,0,0">
|
|
||||||
<TabItem x:Name="Networks" Header="Networks" Foreground="White" IsSelected="True" IsManipulationEnabled="True">-->
|
|
||||||
<Grid Background="LightGray" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition Height="*"/>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<local:NetworksPage x:Name="networksPage" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="0" Grid.Row="0" Margin="0,0,0,0"/>
|
|
||||||
</Grid>
|
|
||||||
<!--</TabItem>-->
|
|
||||||
<!--<TabItem x:Name="Peers" Header="Peers" Foreground="White">
|
|
||||||
<Grid Background="#FFE5E5E5" HorizontalAlignment="Left" VerticalAlignment="Top">
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition Height="*"/>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<local:PeersPage x:Name="peersPage" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Column="0" Grid.Row="0"/>
|
|
||||||
</Grid>
|
|
||||||
</TabItem>-->
|
|
||||||
<!--</TabControl>-->
|
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
</Window>
|
</Window>
|
||||||
|
|
|
@ -28,69 +28,22 @@ namespace WinUI
|
||||||
Regex charRegex = new Regex("[0-9a-fxA-FX]");
|
Regex charRegex = new Regex("[0-9a-fxA-FX]");
|
||||||
Regex wholeStringRegex = new Regex("^[0-9a-fxA-FX]+$");
|
Regex wholeStringRegex = new Regex("^[0-9a-fxA-FX]+$");
|
||||||
|
|
||||||
Timer timer = new Timer();
|
|
||||||
|
|
||||||
bool connected = false;
|
|
||||||
|
|
||||||
public NetworkListView()
|
public NetworkListView()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
APIHandler.Instance.GetStatus(updateStatus);
|
Closed += onClosed;
|
||||||
|
|
||||||
if (!connected)
|
NetworkMonitor.Instance.SubscribeNetworkUpdates(updateNetworks);
|
||||||
{
|
|
||||||
MessageBox.Show("Unable to connect to ZerOTier Service");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
APIHandler.Instance.GetNetworks(updateNetworks);
|
|
||||||
|
|
||||||
DataObject.AddPastingHandler(joinNetworkID, OnPaste);
|
|
||||||
|
|
||||||
timer.Elapsed += new ElapsedEventHandler(OnUpdateTimer);
|
|
||||||
timer.Interval = 2000;
|
|
||||||
timer.Enabled = true;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateStatus(ZeroTierStatus status)
|
~NetworkListView()
|
||||||
{
|
{
|
||||||
if (status != null)
|
}
|
||||||
{
|
|
||||||
connected = true;
|
|
||||||
|
|
||||||
networkId.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
|
private void onClosed(object sender, System.EventArgs e)
|
||||||
{
|
{
|
||||||
this.networkId.Text = status.Address;
|
NetworkMonitor.Instance.UnsubscribeNetworkUpdates(updateNetworks);
|
||||||
}));
|
|
||||||
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.Text = "";
|
|
||||||
}));
|
|
||||||
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(List<ZeroTierNetwork> networks)
|
private void updateNetworks(List<ZeroTierNetwork> networks)
|
||||||
|
@ -104,24 +57,6 @@ namespace WinUI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnUpdateTimer(object source, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
APIHandler.Instance.GetStatus(updateStatus);
|
|
||||||
APIHandler.Instance.GetNetworks(updateNetworks);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void joinButton_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (joinNetworkID.Text.Length < 16)
|
|
||||||
{
|
|
||||||
MessageBox.Show("Invalid Network ID");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
APIHandler.Instance.JoinNetwork(joinNetworkID.Text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnNetworkEntered(object sender, TextCompositionEventArgs e)
|
private void OnNetworkEntered(object sender, TextCompositionEventArgs e)
|
||||||
{
|
{
|
||||||
e.Handled = !charRegex.IsMatch(e.Text);
|
e.Handled = !charRegex.IsMatch(e.Text);
|
||||||
|
|
|
@ -68,9 +68,13 @@ namespace WinUI
|
||||||
{
|
{
|
||||||
var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
|
var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
|
||||||
netList = (List<ZeroTierNetwork>)bformatter.Deserialize(stream);
|
netList = (List<ZeroTierNetwork>)bformatter.Deserialize(stream);
|
||||||
|
stream.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
_knownNetworks = netList;
|
lock (_knownNetworks)
|
||||||
|
{
|
||||||
|
_knownNetworks = netList;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,28 +90,36 @@ namespace WinUI
|
||||||
|
|
||||||
using (Stream stream = File.Open(dataFile, FileMode.OpenOrCreate))
|
using (Stream stream = File.Open(dataFile, FileMode.OpenOrCreate))
|
||||||
{
|
{
|
||||||
var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
|
lock (_knownNetworks)
|
||||||
bformatter.Serialize(stream, _knownNetworks);
|
{
|
||||||
|
var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
|
||||||
|
bformatter.Serialize(stream, _knownNetworks);
|
||||||
|
stream.Flush();
|
||||||
|
stream.Close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void apiNetworkCallback(List<ZeroTierNetwork> networks)
|
private void apiNetworkCallback(List<ZeroTierNetwork> networks)
|
||||||
{
|
{
|
||||||
_knownNetworks = _knownNetworks.Union(networks, new NetworkEqualityComparer()).ToList();
|
lock (_knownNetworks)
|
||||||
|
|
||||||
foreach (ZeroTierNetwork n in _knownNetworks)
|
|
||||||
{
|
{
|
||||||
if (networks.Contains(n))
|
_knownNetworks = _knownNetworks.Union(networks, new NetworkEqualityComparer()).ToList();
|
||||||
{
|
|
||||||
n.IsConnected = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
n.IsConnected = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_nwCb(_knownNetworks);
|
foreach (ZeroTierNetwork n in _knownNetworks)
|
||||||
|
{
|
||||||
|
if (networks.Contains(n))
|
||||||
|
{
|
||||||
|
n.IsConnected = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
n.IsConnected = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_nwCb(_knownNetworks);
|
||||||
|
}
|
||||||
|
|
||||||
writeNetworks();
|
writeNetworks();
|
||||||
}
|
}
|
||||||
|
@ -136,7 +148,7 @@ namespace WinUI
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
Console.WriteLine("Monitor Thread Ended");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,5 +171,21 @@ namespace WinUI
|
||||||
{
|
{
|
||||||
_nwCb -= cb;
|
_nwCb -= cb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RemoveNetwork(String networkID)
|
||||||
|
{
|
||||||
|
lock(_knownNetworks)
|
||||||
|
{
|
||||||
|
foreach (ZeroTierNetwork n in _knownNetworks)
|
||||||
|
{
|
||||||
|
if (n.NetworkId.Equals(networkID))
|
||||||
|
{
|
||||||
|
_knownNetworks.Remove(n);
|
||||||
|
writeNetworks();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue