* 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:
2021-01-08 23:24:35 -06:00
parent b622462c0d
commit 87a9925668
12 changed files with 226 additions and 61 deletions
@@ -4,8 +4,9 @@ using Xamarin.Forms;
using QControlKit;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Linq;
using QControlKit.Events;
using System.Threading.Tasks;
namespace QControlKitXamDemo
{
@@ -20,9 +21,91 @@ namespace QControlKitXamDemo
InitializeComponent();
serverListView.ItemsSource = servers;
QBrowser browser = new QBrowser();
browser.ServerUpdatedWorkspaces += Browser_ServerUpdatedWorkspaces;
browser.ServerLost += Browser_ServerLost;
browser.ServerFound += Browser_ServerFound;
serverListView.ItemSelected += ServerListView_ItemSelected;
Device.StartTimer(TimeSpan.FromSeconds(5), () =>
{
Task.Run(async () =>
{
browser.ProbeForQLabInstances();
});
return true;
});
}
private void Browser_ServerFound(object source, QServerFoundArgs args)
{
List<ServerGroup> serverGroups = servers.ToList();
bool serverFound = false;
foreach (var serverGroup in serverGroups)
{
if (serverGroup.host == args.server.host)
{
serverFound = true;
}
}
if (!serverFound)
{
Device.BeginInvokeOnMainThread(() =>
{
ServerGroup serverGroup = new ServerGroup(args.server.name);
args.server.WorkspaceAdded += Server_WorkspaceAdded;
args.server.WorkspaceRemoved += Server_WorkspaceRemoved;
serverGroup.host = args.server.host;
servers.Add(serverGroup);
});
}
}
private void Server_WorkspaceRemoved(object source, QServerWorkspaceChangedArgs args)
{
foreach (var server in servers)
{
if (server.host == args.server.host)
{
Device.BeginInvokeOnMainThread(() =>
{
server.Remove(args.workspace);
});
}
}
}
private void Server_WorkspaceAdded(object source, QServerWorkspaceChangedArgs args)
{
foreach(var server in servers)
{
if(server.host == args.server.host)
{
Device.BeginInvokeOnMainThread(() =>
{
server.Add(args.workspace);
});
}
}
}
private void Browser_ServerLost(object source, QServerLostArgs args)
{
List<ServerGroup> serverGroups = servers.ToList();
foreach(var serverGroup in serverGroups)
{
if(serverGroup.host == args.server.host)
{
Device.BeginInvokeOnMainThread(() =>
{
servers.Remove(serverGroup);
});
}
}
}
async void ServerListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
@@ -48,26 +131,16 @@ namespace QControlKitXamDemo
serverListView.SelectedItem = null;
}
}
private void Browser_ServerUpdatedWorkspaces(object source, QServerUpdatedArgs args)
{
ServerGroup serverGroup = new ServerGroup(args.server.name);
serverGroup.AddRange(args.server.workspaces);
Device.BeginInvokeOnMainThread(() =>
{
servers.Add(serverGroup);
});
}
}
public class ServerGroup : List<QWorkspace>{
public class ServerGroup : ObservableCollection<QWorkspace>{
public string name { get; set; }
public string host { get; set; }
public ServerGroup(string name)
{
this.name = name;
}
}
}
@@ -12,8 +12,8 @@
<ItemGroup>
<PackageReference Include="Serilog" Version="2.10.0" />
<PackageReference Include="Xamarin.Forms" Version="4.8.0.1560" />
<PackageReference Include="Xamarin.Essentials" Version="1.5.3.2" />
<PackageReference Include="Xamarin.Forms" Version="5.0.0.1874" />
<PackageReference Include="Xamarin.Essentials" Version="1.6.0" />
</ItemGroup>
<ItemGroup>
@@ -2,7 +2,7 @@
using System.ComponentModel;
using System.Runtime.CompilerServices;
using Xamarin.Forms;
using Serilog;
using QControlKit.Events;
using QControlKit.Constants;
@@ -26,7 +26,7 @@ namespace QControlKitXamDemo.ViewModels
{
foreach(var property in args.properties)
{
//Log.Debug($"[cueviewmodel] property <{property}> has been updated.");
Log.Debug($"[cueviewmodel] property <{property}> has been updated.");
if (property.Equals(QOSCKey.Name) || property.Equals(QOSCKey.ListName))
{
OnPropertyChanged("name");