add in status/data and connection event

This commit is contained in:
2022-11-08 15:41:27 -06:00
parent 1a0ccc8763
commit e5d09538ab
6 changed files with 69 additions and 20 deletions
+11
View File
@@ -289,6 +289,17 @@
public const string Error = "error"; public const string Error = "error";
} }
public static class QConnectionRole
{
public const string View = "view";
public const string ViewEdit = "view|edit";
public const string ViewEditControl = "view|edit|control";
public const string ViewControl = "view|control";
public const string EditControl = "edit|control";
public const string Edit = "edit";
public const string Control = "control";
}
public static class QColorName public static class QColorName
{ {
public const string Red = "red"; public const string Red = "red";
+3 -1
View File
@@ -48,7 +48,8 @@ namespace QControlKit.Events
public class QWorkspaceConnectedArgs : EventArgs public class QWorkspaceConnectedArgs : EventArgs
{ {
public string status { get; set; }
public string data { get; set; }
} }
public class QWorkspaceDisconnectedArgs : EventArgs public class QWorkspaceDisconnectedArgs : EventArgs
@@ -59,6 +60,7 @@ namespace QControlKit.Events
public class QWorkspaceConnectionErrorArgs : EventArgs public class QWorkspaceConnectionErrorArgs : EventArgs
{ {
public string status { get; set; } public string status { get; set; }
public string data { get; set; }
} }
public class QQLabPreferencesUpdatedArgs : EventArgs public class QQLabPreferencesUpdatedArgs : EventArgs
{ {
+13 -11
View File
@@ -75,7 +75,7 @@ namespace QControlKit
if (message.IsReply) if (message.IsReply)
{ {
JToken data = message.response; JToken data = message.data;
//special case, want to update cue properties //special case, want to update cue properties
if (message.IsReplyFromCue) if (message.IsReplyFromCue)
@@ -101,13 +101,13 @@ namespace QControlKit
} }
else else
{ {
_log.Error($"unhandled reply from cue: Type: {data.Type} value: {message.response}"); _log.Error($"unhandled reply from cue: Type: {data.Type} value: {message.data}");
} }
} }
else if (message.IsReplyFromCueLists) else if (message.IsReplyFromCueLists)
{ {
OnCueListsUpdated(message.response); OnCueListsUpdated(message.data);
} }
else if (message.IsWorkspacesInfo) else if (message.IsWorkspacesInfo)
{ {
@@ -115,10 +115,12 @@ namespace QControlKit
} }
else if (message.IsConnect) else if (message.IsConnect)
{ {
if (message.response.ToString().Contains("ok")) _log.Verbose(message.data.ToString());
OnWorkspaceConnected(); _log.Verbose("Status:" + message.status.ToString());
if (message.status.ToString().Equals("ok"))
OnWorkspaceConnected(message.status.ToString(),message.data.ToString());
else else
OnWorkspaceConnectionError(message.response.ToString()); OnWorkspaceConnectionError(message.status.ToString(), message.data.ToString());
} }
else else
{ {
@@ -227,14 +229,14 @@ namespace QControlKit
WorkspaceDisconnected?.Invoke(this, new QWorkspaceDisconnectedArgs()); WorkspaceDisconnected?.Invoke(this, new QWorkspaceDisconnectedArgs());
} }
protected virtual void OnWorkspaceConnected() protected virtual void OnWorkspaceConnected(string status, string data)
{ {
WorkspaceConnected?.Invoke(this, new QWorkspaceConnectedArgs()); WorkspaceConnected?.Invoke(this, new QWorkspaceConnectedArgs { status = status, data = data });
} }
protected virtual void OnWorkspaceConnectionError(string status) protected virtual void OnWorkspaceConnectionError(string status, string data)
{ {
WorkspaceConnectionError?.Invoke(this, new QWorkspaceConnectionErrorArgs { status = status }); WorkspaceConnectionError?.Invoke(this, new QWorkspaceConnectionErrorArgs { status = status, data = data });
} }
protected virtual void OnWorkspacesUpdated(QMessage message) protected virtual void OnWorkspacesUpdated(QMessage message)
@@ -242,7 +244,7 @@ namespace QControlKit
if(WorkspacesUpdated != null) if(WorkspacesUpdated != null)
{ {
List<QWorkspaceInfo> workspaces = new List<QWorkspaceInfo>(); List<QWorkspaceInfo> workspaces = new List<QWorkspaceInfo>();
foreach (var item in message.response) foreach (var item in message.data)
{ {
QWorkspaceInfo workspacefound = JsonConvert.DeserializeObject<QWorkspaceInfo>(item.ToString()); QWorkspaceInfo workspacefound = JsonConvert.DeserializeObject<QWorkspaceInfo>(item.ToString());
workspaces.Add(workspacefound); workspaces.Add(workspacefound);
+16 -3
View File
@@ -141,12 +141,25 @@ namespace QControlKit
public string[] AddressParts { get { return address.Split(new char[] { '/' },StringSplitOptions.RemoveEmptyEntries); } } public string[] AddressParts { get { return address.Split(new char[] { '/' },StringSplitOptions.RemoveEmptyEntries); } }
public JToken response public JToken data
{ {
get get
{ {
JObject responseObj = JObject.Parse((string)arguments[0]); JObject dataObj = JObject.Parse((string)arguments[0]);
return responseObj["data"]; return dataObj["data"];
}
}
public JToken status
{
get
{
if (arguments != null && arguments.Count > 0)
{
JObject statusObj = JObject.Parse((string)arguments[0]);
return statusObj["status"];
}
return null;
} }
} }
+6 -4
View File
@@ -160,6 +160,8 @@ namespace QControlKit
public string[] versionParts { get { return version.Split('.'); } } public string[] versionParts { get { return version.Split('.'); } }
public bool connectedToQLab3 { get { return versionParts[0] == "3"; } } public bool connectedToQLab3 { get { return versionParts[0] == "3"; } }
public bool connectedToQLab4 { get { return versionParts[0] == "4"; } }
public bool connectedToQLab5 { get { return versionParts[0] == "5"; } }
#region Connection/reconnection #region Connection/reconnection
@@ -170,14 +172,14 @@ namespace QControlKit
if(hasPasscode && passcode == null) if(hasPasscode && passcode == null)
{ {
_log.Error($"*** workspace <{name}> requires a passcode but none was supplied."); _log.Error($"*** workspace <{name}> requires a passcode but none was supplied.");
OnWorkspaceConnectionError(this, new QWorkspaceConnectionErrorArgs { status = QConnectionStatus.BadPass }); OnWorkspaceConnectionError(this, new QWorkspaceConnectionErrorArgs { status = QConnectionStatus.BadPass, data = "badpass" });
return; return;
} }
if (!client.connect()) if (!client.connect())
{ {
_log.Error($"*** couldn't connect to server client is not connected."); _log.Error($"*** couldn't connect to server client is not connected.");
OnWorkspaceConnectionError(this, new QWorkspaceConnectionErrorArgs { status = QConnectionStatus.Error }); OnWorkspaceConnectionError(this, new QWorkspaceConnectionErrorArgs { status = QConnectionStatus.Error, data = "error" });
return; return;
} }
@@ -425,13 +427,13 @@ namespace QControlKit
_log.Error($"*** Unable to connect to workspace: <{name}> on server: <{server.name}>"); _log.Error($"*** Unable to connect to workspace: <{name}> on server: <{server.name}>");
} }
WorkspaceConnectionError?.Invoke(this, new QWorkspaceConnectionErrorArgs { status = args.status }); WorkspaceConnectionError?.Invoke(this, args);
} }
private void OnWorkspaceConnected(object source, QWorkspaceConnectedArgs args) private void OnWorkspaceConnected(object source, QWorkspaceConnectedArgs args)
{ {
_log.Information($"Connection to <{name}> successful, finishing things up."); _log.Information($"Connection to <{name}> successful, finishing things up.");
WorkspaceConnected?.Invoke(this, new QWorkspaceConnectedArgs()); WorkspaceConnected?.Invoke(this, args);
finishConnection(); finishConnection();
} }
@@ -21,25 +21,44 @@ namespace QControlKitXamDemo
connectedWorkspace = workspace; connectedWorkspace = workspace;
connectedWorkspace.WorkspaceUpdated += Workspace_WorkspaceUpdated; connectedWorkspace.WorkspaceUpdated += Workspace_WorkspaceUpdated;
connectedWorkspace.WorkspaceConnectionError += ConnectedWorkspace_WorkspaceConnectionError; connectedWorkspace.WorkspaceConnectionError += ConnectedWorkspace_WorkspaceConnectionError;
connectedWorkspace.WorkspaceConnected += ConnectedWorkspace_WorkspaceConnected; ;
connectedWorkspace.connect(passcode); connectedWorkspace.connect(passcode);
connectedWorkspace.defaultSendUpdatesOSC = true; connectedWorkspace.defaultSendUpdatesOSC = true;
connectedWorkspace.CueListChangedPlaybackPosition += ConnectedWorkspace_CueListChangedPlaybackPosition; connectedWorkspace.CueListChangedPlaybackPosition += ConnectedWorkspace_CueListChangedPlaybackPosition;
} }
protected override void OnDisappearing() protected override void OnDisappearing()
{ {
base.OnDisappearing(); base.OnDisappearing();
connectedWorkspace.disconnect(); connectedWorkspace.disconnect();
connectedWorkspace.WorkspaceUpdated -= Workspace_WorkspaceUpdated; connectedWorkspace.WorkspaceUpdated -= Workspace_WorkspaceUpdated;
connectedWorkspace.WorkspaceConnectionError -= ConnectedWorkspace_WorkspaceConnectionError; connectedWorkspace.WorkspaceConnectionError -= ConnectedWorkspace_WorkspaceConnectionError;
connectedWorkspace.WorkspaceConnected -= ConnectedWorkspace_WorkspaceConnected;
connectedWorkspace.CueListChangedPlaybackPosition -= ConnectedWorkspace_CueListChangedPlaybackPosition; connectedWorkspace.CueListChangedPlaybackPosition -= ConnectedWorkspace_CueListChangedPlaybackPosition;
} }
private async void ConnectedWorkspace_WorkspaceConnected(object source, QWorkspaceConnectedArgs args)
{
if (args.status.Equals("ok") && connectedWorkspace.connectedToQLab5)
{
if (!args.data.Contains(QConnectionRole.View))
{
string passcode = await DisplayPromptAsync("PIN does not have view permissions.", "Try Again", maxLength: 4, keyboard: Keyboard.Numeric);
if (passcode != null)
{
connectedWorkspace.connect(passcode);
}
}
}
}
private async void ConnectedWorkspace_WorkspaceConnectionError(object source, QWorkspaceConnectionErrorArgs args) private async void ConnectedWorkspace_WorkspaceConnectionError(object source, QWorkspaceConnectionErrorArgs args)
{ {
if (args.status.Equals("badpass")) if (args.status.Equals("badpass"))
{ {
string passcode = await DisplayPromptAsync("Passcode was incorrect.", "Try Again", maxLength: 4, keyboard: Keyboard.Numeric); string passcode = await DisplayPromptAsync("PIN is incorrect.", "Try Again", maxLength: 4, keyboard: Keyboard.Numeric);
if (passcode != null) if (passcode != null)
{ {
connectedWorkspace.connect(passcode); connectedWorkspace.connect(passcode);