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 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 const string Red = "red";
+3 -1
View File
@@ -48,7 +48,8 @@ namespace QControlKit.Events
public class QWorkspaceConnectedArgs : EventArgs
{
public string status { get; set; }
public string data { get; set; }
}
public class QWorkspaceDisconnectedArgs : EventArgs
@@ -59,6 +60,7 @@ namespace QControlKit.Events
public class QWorkspaceConnectionErrorArgs : EventArgs
{
public string status { get; set; }
public string data { get; set; }
}
public class QQLabPreferencesUpdatedArgs : EventArgs
{
+13 -11
View File
@@ -75,7 +75,7 @@ namespace QControlKit
if (message.IsReply)
{
JToken data = message.response;
JToken data = message.data;
//special case, want to update cue properties
if (message.IsReplyFromCue)
@@ -101,13 +101,13 @@ namespace QControlKit
}
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)
{
OnCueListsUpdated(message.response);
OnCueListsUpdated(message.data);
}
else if (message.IsWorkspacesInfo)
{
@@ -115,10 +115,12 @@ namespace QControlKit
}
else if (message.IsConnect)
{
if (message.response.ToString().Contains("ok"))
OnWorkspaceConnected();
_log.Verbose(message.data.ToString());
_log.Verbose("Status:" + message.status.ToString());
if (message.status.ToString().Equals("ok"))
OnWorkspaceConnected(message.status.ToString(),message.data.ToString());
else
OnWorkspaceConnectionError(message.response.ToString());
OnWorkspaceConnectionError(message.status.ToString(), message.data.ToString());
}
else
{
@@ -227,14 +229,14 @@ namespace QControlKit
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)
@@ -242,7 +244,7 @@ namespace QControlKit
if(WorkspacesUpdated != null)
{
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());
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 JToken response
public JToken data
{
get
{
JObject responseObj = JObject.Parse((string)arguments[0]);
return responseObj["data"];
JObject dataObj = JObject.Parse((string)arguments[0]);
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 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
@@ -170,14 +172,14 @@ namespace QControlKit
if(hasPasscode && passcode == null)
{
_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;
}
if (!client.connect())
{
_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;
}
@@ -425,13 +427,13 @@ namespace QControlKit
_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)
{
_log.Information($"Connection to <{name}> successful, finishing things up.");
WorkspaceConnected?.Invoke(this, new QWorkspaceConnectedArgs());
WorkspaceConnected?.Invoke(this, args);
finishConnection();
}
@@ -21,25 +21,44 @@ namespace QControlKitXamDemo
connectedWorkspace = workspace;
connectedWorkspace.WorkspaceUpdated += Workspace_WorkspaceUpdated;
connectedWorkspace.WorkspaceConnectionError += ConnectedWorkspace_WorkspaceConnectionError;
connectedWorkspace.WorkspaceConnected += ConnectedWorkspace_WorkspaceConnected; ;
connectedWorkspace.connect(passcode);
connectedWorkspace.defaultSendUpdatesOSC = true;
connectedWorkspace.CueListChangedPlaybackPosition += ConnectedWorkspace_CueListChangedPlaybackPosition;
}
protected override void OnDisappearing()
{
base.OnDisappearing();
connectedWorkspace.disconnect();
connectedWorkspace.WorkspaceUpdated -= Workspace_WorkspaceUpdated;
connectedWorkspace.WorkspaceConnectionError -= ConnectedWorkspace_WorkspaceConnectionError;
connectedWorkspace.WorkspaceConnected -= ConnectedWorkspace_WorkspaceConnected;
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)
{
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)
{
connectedWorkspace.connect(passcode);