Star work on Multiple Workspaces, Improve Networks

Android version 1.0.5
This commit is contained in:
2019-04-25 08:44:20 -05:00
parent 17b66f9113
commit 5ad19ffbdb
10 changed files with 107 additions and 52 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="21" android:versionName="1.0.4" package="com.jwetzell.qlabcontroller">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="22" android:versionName="1.0.5" package="com.jwetzell.qlabcontroller">
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="26" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:label="qController" android:icon="@drawable/icon"></application>
@@ -77,7 +77,6 @@ namespace qController
}
public void sendAndReceiveString(string address)
{
tcpSender.SendAndReceive(new OscMessage(address));
try
{
tcpSender.SendAndReceive(new OscMessage(address));
@@ -110,14 +109,14 @@ namespace qController
else if (msg.Address.Contains("cue_id"))
{
var updateID = msg.Address.Split('/').Last();
UpdateSpecificCue(updateID);
//UpdateSpecificCue(updateID);
}
else if (msg.Address.Contains("playbackPosition"))
{
if (msg.Arguments.Count > 0)
{
qParser.ParseMessage(msg);
UpdateSelectedCue();
//UpdateSelectedCue();
}
}
else if (msg.Address.Contains("workspace"))
@@ -128,9 +127,7 @@ namespace qController
public void UpdateSpecificCue(string cue_id)
{
string valuesForKeys = "[\"number\",\"uniqueID\",\"flagged\",\"listName\",\"type\",\"colorName\",\"name\",\"armed\",\"displayName\",\"isBroken\",\"isLoaded\",\"isPaused\",\"isRunning\",\"preWait\",\"duration\",\"postWait\",\"translationX\",\"translationY\",\"opacity\",\"scaleX\",\"scaleY\",\"notes\",\"levels\"]";
string address = "/cue_id/" + cue_id + "/valuesForKeys";
sendAndReceiveStringArgs(address, valuesForKeys);
}
@@ -9,7 +9,7 @@ namespace qController
public class QController
{
QUpdater qUpdater;
public QUpdater qUpdater;
public QClient qClient;
public QWorkSpace qWorkspace;
public string playbackPosition;
@@ -19,14 +19,24 @@ namespace qController
qClient = new QClient(address, port);
qUpdater = new QUpdater(this);
qUpdater.Start();
//Connect();
qClient.sendArgsUDP("/updates", 1);
qClient.sendAndReceiveString("/cueLists");
Connect();
KickOff();
}
public void Connect()
{
qClient.sendStringUDP("/connect");
Console.WriteLine("QCONTROLLER CONNECT CALLED");
//qClient.sendStringUDP("/connect");
qClient.sendArgsUDP("/updates", 1);
qClient.sendAndReceiveString("/cueLists");
}
public void KickOff()
{
qClient.sendArgsUDP("/workspaces");
}
public void Disconnect()
@@ -44,6 +44,15 @@ namespace qController
}
}
public class WorkspaceInfoArgs : EventArgs
{
public List<QInfo> WorkspaceInfo
{
get;
set;
}
}
public class ChildrenEventArgs : EventArgs
{
public string cue_id
@@ -71,6 +80,8 @@ namespace qController
public delegate void ConnectionStatusHandler(object source, ConnectEventArgs args);
public delegate void ChildrenUpdateHandler(object source, ChildrenEventArgs args);
public delegate void WorkspaceDisconnectHandler(object source, EventArgs args);
public delegate void WorkspaceInfoHandler(object source, WorkspaceInfoArgs args);
public event WorkspaceInfoHandler WorkspaceInfoReceived;
public event WorkspaceDisconnectHandler WorkspaceDisconnect;
public event ChildrenUpdateHandler ChildrenUpdated;
public event ConnectionStatusHandler ConnectionStatusChanged;
@@ -86,22 +97,20 @@ namespace qController
{
ParseCueUpdateInfo(msg);
}
else if (msg.Address.Contains("notes"))
ParseNoteInfo(msg);
else if (msg.Address.Contains("cueLists"))
ParseWorkspaceInfo(msg);
else if (msg.Address.Contains("playbackPosition"))
ParsePositionUpdateInfo(msg);
else if (msg.Address.Contains("thump"))
Console.WriteLine("Heartbeat Received");
else if (msg.Address.Contains("disconnect"))
OnWorkspaceDisconnect();
else if (msg.Address.Contains("connect"))
ParseConnectInfo(msg);
else if (msg.Address.Contains("children"))
ParseChildrenInfo(msg);
else if (msg.Address.Contains("workspaces"))
ParseInstanceInfo(msg);
else if (msg.Address.Contains("disconnect"))
OnWorkspaceDisconnect();
ParseQInfo(msg);
else
{
Console.WriteLine("Unknown message type");
@@ -116,8 +125,11 @@ namespace qController
public void ParseConnectInfo(OscMessage msg)
{
JToken connectStatus = OSC2JSON(msg);
OnConnectionStatusChanged(connectStatus.ToString());
if (msg.Arguments.Count > 0)
{
JToken connectStatus = OSC2JSON(msg);
OnConnectionStatusChanged(connectStatus.ToString());
}
}
public void ParsePositionUpdateInfo(OscMessage msg)
@@ -141,15 +153,11 @@ namespace qController
OnSelectedCueUpdated(cue);
}
public void ParseInstanceInfo(OscMessage msg)
public void ParseQInfo(OscMessage msg)
{
//Console.WriteLine(OSC2JSON(msg));
return;
}
public void ParseNoteInfo(OscMessage msg){
//JToken cueInfo = OSC2JSON(msg);
return;
JToken qInfo = OSC2JSON(msg);
List<QInfo> qWorkspaceInfo = JsonConvert.DeserializeObject<List<QInfo>>(qInfo.ToString());
OnWorkspaceInfoReceived(qWorkspaceInfo);
}
public void ParseWorkspaceInfo(OscMessage msg)
@@ -214,6 +222,11 @@ namespace qController
if (WorkspaceDisconnect != null)
WorkspaceDisconnect(this, new EventArgs());
}
protected virtual void OnWorkspaceInfoReceived(List<QInfo> workspaces)
{
if (WorkspaceInfoReceived != null)
WorkspaceInfoReceived(this, new WorkspaceInfoArgs() { WorkspaceInfo = workspaces });
}
}
}
@@ -67,18 +67,6 @@ namespace qController
qController.qWorkspace = args.UpdatedWorkspace;
qController.playbackPosition = null;
qController.qWorkspace.CheckPopulated();
RefreshGroupCues();
//qController.qClient.UpdateSelectedCue();
}
public void OnPlaybackPositionUpdated(object source, PlaybackPositionArgs args)
{
qController.playbackPosition = args.PlaybackPosition;
}
public void RefreshGroupCues()
{
if (qController.qWorkspace.IsPopulated)
{
Console.WriteLine("Workspace group cues are already populated");
@@ -86,6 +74,19 @@ namespace qController
qController.qClient.UpdateSelectedCue();
return;
}
//RefreshGroupCues();
//qController.qClient.UpdateSelectedCue();
}
public void OnPlaybackPositionUpdated(object source, PlaybackPositionArgs args)
{
qController.playbackPosition = args.PlaybackPosition;
qController.qClient.UpdateSpecificCue(args.PlaybackPosition);
}
public void RefreshGroupCues()
{
Console.WriteLine("Workspace group cues are not populated");
foreach (var cueList in qController.qWorkspace.data)
{
@@ -78,7 +78,7 @@ namespace SharpOSC
//Console.WriteLine( "Thread " + num + ": Bytes read: " + bytesRead + " - " + Encoding.ASCII.GetString(buffer));
} while (netStream.DataAvailable);
//Console.WriteLine("Raw TCP In: " + System.Text.Encoding.ASCII.GetString(responseData.ToArray()));
Console.WriteLine("Raw TCP In: " + System.Text.Encoding.ASCII.GetString(responseData.ToArray()));
response = (OscMessage)OscPacket.GetPacket(responseData.Skip(1).ToArray());
}
} catch(Exception e)
@@ -90,6 +90,7 @@ namespace SharpOSC
public void SendAndReceive(byte[] message)
{
client = new TcpClient(Address, Port);
byte[] slipData = SlipEncode(message);
NetworkStream netStream = client.GetStream();
@@ -99,6 +100,8 @@ namespace SharpOSC
public void SendAndReceive(OscPacket packet)
{
OscMessage msg = (OscMessage)packet;
Console.WriteLine("TCP Message Sent: " + msg.Address);
byte[] data = packet.GetBytes();
SendAndReceive(data);
}
@@ -151,7 +151,8 @@ namespace SharpOSC
{
byte[] bytes = queue.Dequeue();
var packet = OscPacket.GetPacket(bytes);
return packet;
Console.WriteLine("Raw UDP In: " + System.Text.Encoding.ASCII.GetString(bytes));
return packet;
}
else
return null;
@@ -0,0 +1,11 @@
using System;
namespace qController
{
public class QInfo
{
public string version { get; set; }
public string displayName { get; set; }
public string uniqueID { get; set; }
public bool hasPasscode { get; set; }
}
}
@@ -33,6 +33,7 @@ namespace qController
{
if(data[i].cues[j].uniqueID == cue.uniqueID)
{
//Console.WriteLine("Cue found and updated in workspace: " + cue.uniqueID);
data[i].cues[j] = cue;
return;
}
+31 -13
View File
@@ -18,15 +18,31 @@ namespace qController
InitializeComponent();
qController = new QController(address, 53000);
qController.qClient.qParser.WorkspaceInfoReceived += WorkspaceInfoReceived;
qController.qClient.qParser.WorkspaceUpdated += WorkspaceUpdated;
qController.qClient.qParser.PlaybackPositionUpdated += PlaybackPositionUpdated;
qController.qClient.qParser.CueInfoUpdated += OnCueUpdateReceived;
qController.qClient.qParser.ChildrenUpdated += OnChildrenUpdated;
instanceName.Text = name;
App.rootPage.MenuItemSelected += OnMenuItemSelected;
qController.Connect();
instanceName.Text = name;
InitGUI();
}
private void WorkspaceInfoReceived(object source, WorkspaceInfoArgs args)
{
if(args.WorkspaceInfo.Count > 1)
{
Console.WriteLine("MULTIPLE WORKSPACES ON SELECTED COMPUTER");
}
else
{
Console.WriteLine("ONLY ONE WORKSPACE ON SELECTED COMPUTER");
//qController.Connect();
}
}
private void InitGUI()
@@ -144,22 +160,25 @@ namespace qController
{
if(e.UpdatedWorkspace.data.Count > 0)
{
App.rootPage.MenuPage.ChangeToWorkspace(e.UpdatedWorkspace);
qController.qWorkspace = e.UpdatedWorkspace;
qController.qWorkspace.CheckPopulated();
if (qController.qWorkspace.IsPopulated)
{
App.rootPage.MenuPage.ChangeToWorkspace(e.UpdatedWorkspace);
if (qCell.activeCue == null)
{
QCue noSelect = new QCue();
noSelect.listName = "No Cue Selected";
noSelect.type = "";
noSelect.notes = "Workspace has loaded but no cue is selected";
noSelect.number = "!";
qCell.UpdateSelectedCue(noSelect);
Device.BeginInvokeOnMainThread(() => {
QCue noSelect = new QCue();
noSelect.listName = "No Cue Selected";
noSelect.type = "";
noSelect.notes = "Workspace has loaded but no cue is selected";
noSelect.number = "!";
qCell.UpdateSelectedCue(noSelect);
});
}
Console.WriteLine("Workspace updated in ControlPage: " + qController.qWorkspace.workspace_id);
}
Console.WriteLine("Workspace updated in ControlPage: " + qController.qWorkspace.workspace_id);
}
}
@@ -183,12 +202,11 @@ namespace qController
public void OnCueUpdateReceived(object sender, CueEventArgs args)
{
qController.qWorkspace.UpdateCue(args.Cue);
Console.WriteLine("Cue updated in ControlPage: " + args.Cue.uniqueID);
if (args.Cue.uniqueID == qController.playbackPosition)
{
Console.WriteLine("Cue that was updated is equal to the playback position.");
Device.BeginInvokeOnMainThread(() =>
{
Console.WriteLine("Refreshing Currently Displayed Cue");
if (args.Cue.levels != null)
sLayout.Children.Add(qSelectedCueOptions);
else