summaryrefslogtreecommitdiff
path: root/windows/WinUI/NetworkMonitor.cs
diff options
context:
space:
mode:
Diffstat (limited to 'windows/WinUI/NetworkMonitor.cs')
-rw-r--r--windows/WinUI/NetworkMonitor.cs58
1 files changed, 43 insertions, 15 deletions
diff --git a/windows/WinUI/NetworkMonitor.cs b/windows/WinUI/NetworkMonitor.cs
index de5543f6..7743c5b9 100644
--- a/windows/WinUI/NetworkMonitor.cs
+++ b/windows/WinUI/NetworkMonitor.cs
@@ -68,9 +68,13 @@ namespace WinUI
{
var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
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))
{
- var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
- bformatter.Serialize(stream, _knownNetworks);
+ lock (_knownNetworks)
+ {
+ var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
+ bformatter.Serialize(stream, _knownNetworks);
+ stream.Flush();
+ stream.Close();
+ }
}
}
private void apiNetworkCallback(List<ZeroTierNetwork> networks)
{
- _knownNetworks = _knownNetworks.Union(networks, new NetworkEqualityComparer()).ToList();
-
- foreach (ZeroTierNetwork n in _knownNetworks)
+ lock (_knownNetworks)
{
- if (networks.Contains(n))
- {
- n.IsConnected = true;
- }
- else
+ _knownNetworks = _knownNetworks.Union(networks, new NetworkEqualityComparer()).ToList();
+
+ foreach (ZeroTierNetwork n in _knownNetworks)
{
- n.IsConnected = false;
+ if (networks.Contains(n))
+ {
+ n.IsConnected = true;
+ }
+ else
+ {
+ n.IsConnected = false;
+ }
}
- }
- _nwCb(_knownNetworks);
+ _nwCb(_knownNetworks);
+ }
writeNetworks();
}
@@ -136,7 +148,7 @@ namespace WinUI
}
catch
{
-
+ Console.WriteLine("Monitor Thread Ended");
}
}
@@ -159,5 +171,21 @@ namespace WinUI
{
_nwCb -= cb;
}
+
+ public void RemoveNetwork(String networkID)
+ {
+ lock(_knownNetworks)
+ {
+ foreach (ZeroTierNetwork n in _knownNetworks)
+ {
+ if (n.NetworkId.Equals(networkID))
+ {
+ _knownNetworks.Remove(n);
+ writeNetworks();
+ break;
+ }
+ }
+ }
+ }
}
}