Files
QControlKit/QSharp/QMessage.cs
T
2020-06-10 13:24:39 -05:00

164 lines
4.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;
using SharpOSC;
namespace QSharp
{
public class QMessage
{
private OscMessage OSCMessage;
public QMessage(OscMessage oscMessage)
{
OSCMessage = oscMessage;
}
public string description
{
get
{
//string join probably won't work might need to cast argument objects to strings first
return $"address: {address}, arguments: {string.Join(" - ", arguments)}";
}
}
#region Message Type Checks
public bool IsReply { get { return OSCMessage.Address.StartsWith("/reply"); } }
// /reply/cue_id/1/action
public bool IsReplyFromCue { get{ return OSCMessage.Address.StartsWith("/reply/cue_id"); } }
public bool IsReplyFromCueLists { get { return IsReply && OSCMessage.Address.EndsWith("cueLists"); } }
public bool IsUpdate { get{ return OSCMessage.Address.StartsWith("/update"); } }
public bool IsWorkspaceUpdate {
get {
// /update/workspace/{workspace_id}
string[] parts = AddressParts;
return (parts.Length == 3 && parts[1].Equals("workspace"));
}
}
public bool IsWorkspacesInfo {
get {
// /workspaces
string[] parts = AddressParts;
return (parts.Length == 2 && parts[1] == "workspaces");
}
}
public bool IsWorkspaceSettingsUpdate {
get {
// /update/workspace/{workspace_id}/settings/{settings_controller}
string[] parts = AddressParts;
return (parts.Length == 5 && parts[1].Equals("workspace") && parts[3].Equals("settings"));
}
}
public bool IsLightDashboardUpdate {
get {
// /update/workspace/{workspace_id}/dashboard
string[] parts = AddressParts;
return (parts.Length == 4 && parts[1].Equals("workspace") && parts[3].Equals("dashboard"));
}
}
public bool IsCueUpdate {
get {
// /update/workspace/{workspace_id}/cue_id/{cue_id}
string[] parts = AddressParts;
return (parts.Length == 5 && parts[1].Equals("workspace") && parts[3].Equals("cue_id"));
}
}
public bool IsPlaybackPositionUpdate {
get {
// /update/workspace/{workspace_id}/cueList/{cue_list_id}/playbackPosition {cue_id}
string[] parts = AddressParts;
return (parts.Length == 6 && address.EndsWith("/playbackPosition"));
}
}
public bool IsPreferencesUpdate {
get {
string[] parts = AddressParts;
return (parts.Length == 4 && parts[3].Equals("preferences"));
}
}
public bool IsDisconnect {
get {
string[] parts = AddressParts;
return (parts.Length == 4 && parts[3].Equals("disconnect"));
}
}
public bool IsConnect
{
get
{
string[] parts = AddressParts;
return (parts.Length == 4 && parts[3].Equals("connect"));
}
}
#endregion
//host method
public string address { get { return OSCMessage.Address; } }
public string replyAddress { get{ return IsReply ? address.Substring("/reply".Length) : address; } }
public string addressWithoutWorkspace
{
get
{
//TODO
return "";
}
}
public string[] AddressParts { get { return address.Split("/",StringSplitOptions.RemoveEmptyEntries); } }
public JToken response
{
get
{
JObject responseObj = JObject.Parse((string)arguments[0]);
return responseObj["data"];
}
}
public List<Object> arguments { get { return OSCMessage.Arguments; } }
public string cueID
{
get
{
if (IsCueUpdate)
{
return AddressParts[4];
}else if (IsPlaybackPositionUpdate)
{
//TODO: check string cast
return arguments.Count > 0 ? (string)arguments[0] : null;
}else if (IsReplyFromCue)
{
return AddressParts[2];
}
else
{
return null;
}
}
}
}
}