mirror of
https://github.com/jwetzell/QControlKit.git
synced 2026-08-16 12:53:29 +00:00
* QControlKit.csproj:
* MainPage.xaml.cs: * AppDelegate.cs: * QControlKitXamDemo.csproj: * QCueViewModel.cs: * QControlKitXamDemo.iOS.csproj: * QControlKitXamDemo.Android.csproj: Update Packages * QServer.cs: * QBrowser.cs: * QWorkspace.cs: * QEventArgs.cs: * QEventHandlers.cs: Refine Server Found/Lost and Workspace Added/Removed
This commit is contained in:
+55
-33
@@ -5,61 +5,79 @@ using Serilog;
|
||||
|
||||
using QControlKit.Constants;
|
||||
using QControlKit.Events;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace QControlKit
|
||||
{
|
||||
public class QBrowser
|
||||
{
|
||||
|
||||
ZeroconfResolver.ResolverListener zeroconfTCPBrowser;
|
||||
|
||||
public ObservableCollection<QServer> servers = new ObservableCollection<QServer>();
|
||||
|
||||
public event QServerFoundHandler ServerFound;
|
||||
public event QServerLostHandler ServerLost;
|
||||
public event QServerUpdatedHandler ServerUpdatedWorkspaces;
|
||||
|
||||
public QBrowser()
|
||||
{
|
||||
zeroconfTCPBrowser = ZeroconfResolver.CreateListener(QBonjour.TCPService);
|
||||
zeroconfTCPBrowser.ServiceFound += ZeroconfHostFound;
|
||||
zeroconfTCPBrowser.ServiceLost += ZeroconfHostLost;
|
||||
ProbeForQLabInstances();
|
||||
}
|
||||
|
||||
private void ZeroconfHostLost(object sender, IZeroconfHost e)
|
||||
public async void ProbeForQLabInstances()
|
||||
{
|
||||
Log.Information($"[browser] Lost {e.DisplayName} : {e.IPAddress}");
|
||||
IReadOnlyList<IZeroconfHost> results = await
|
||||
ZeroconfResolver.ResolveAsync(QBonjour.TCPService,TimeSpan.FromSeconds(3));
|
||||
|
||||
}
|
||||
|
||||
private void ZeroconfHostFound(object sender, IZeroconfHost e)
|
||||
{
|
||||
|
||||
|
||||
foreach(var service in e.Services)
|
||||
foreach (var zeroconfHost in results)
|
||||
{
|
||||
if (service.Key.Equals(QBonjour.TCPService))
|
||||
foreach (var service in zeroconfHost.Services)
|
||||
{
|
||||
Log.Information($"Found {e.DisplayName} : {e.IPAddress} : {service.Value.Port}");
|
||||
|
||||
QServer server = serverForAddress(e.IPAddress);
|
||||
|
||||
if(server == null)
|
||||
if (service.Key.Equals(QBonjour.TCPService))
|
||||
{
|
||||
QServer serverToAdd = new QServer(e.IPAddress, service.Value.Port);
|
||||
serverToAdd.name = e.DisplayName;
|
||||
serverToAdd.zeroconfHost = e;
|
||||
servers.Add(serverToAdd);
|
||||
serverToAdd.refreshWorkspaces();
|
||||
serverToAdd.ServerUpdated += OnServerUpdatedWorkspace;
|
||||
OnServerFound(serverToAdd);
|
||||
}
|
||||
else
|
||||
{
|
||||
server.name = e.DisplayName;
|
||||
|
||||
QServer server = serverForAddress(zeroconfHost.IPAddress);
|
||||
|
||||
if (server == null)
|
||||
{
|
||||
Log.Information($"[qbrowser] Found {zeroconfHost.DisplayName} : {zeroconfHost.IPAddress} : {service.Value.Port}");
|
||||
QServer serverToAdd = new QServer(zeroconfHost.IPAddress, service.Value.Port);
|
||||
serverToAdd.name = zeroconfHost.DisplayName;
|
||||
serverToAdd.zeroconfHost = zeroconfHost;
|
||||
servers.Add(serverToAdd);
|
||||
serverToAdd.refreshWorkspaces();
|
||||
serverToAdd.ServerUpdated += OnServerUpdatedWorkspace;
|
||||
OnServerFound(serverToAdd);
|
||||
}
|
||||
else
|
||||
{
|
||||
server.name = zeroconfHost.DisplayName;
|
||||
server.refreshWorkspaces();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<QServer> qServers = servers.ToList();
|
||||
|
||||
foreach(var server in qServers)
|
||||
{
|
||||
bool serverToBeRemoved = true;
|
||||
foreach(var zeroconfHost in results){
|
||||
QServer existingServer = serverForAddress(zeroconfHost.IPAddress);
|
||||
if(server != null)
|
||||
{
|
||||
serverToBeRemoved = false;
|
||||
}
|
||||
}
|
||||
if (serverToBeRemoved)
|
||||
{
|
||||
server.disconnect();
|
||||
servers.Remove(server);
|
||||
Log.Information($"[qbrowser] Lost {server.name} : {server.host} : {server.port}");
|
||||
OnServerLost(server);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public QServer serverForAddress(string address)
|
||||
@@ -93,6 +111,11 @@ namespace QControlKit
|
||||
ServerFound?.Invoke(this, new QServerFoundArgs { server = server });
|
||||
}
|
||||
|
||||
protected virtual void OnServerLost(QServer server)
|
||||
{
|
||||
ServerLost?.Invoke(this, new QServerLostArgs { server = server });
|
||||
}
|
||||
|
||||
protected virtual void OnServerUpdatedWorkspace(object source, QServerUpdatedArgs args)
|
||||
{
|
||||
ServerUpdatedWorkspaces?.Invoke(this, args);
|
||||
@@ -104,7 +127,6 @@ namespace QControlKit
|
||||
{
|
||||
server.disconnect();
|
||||
}
|
||||
zeroconfTCPBrowser.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user