mirror of
https://github.com/jwetzell/qController.git
synced 2026-08-04 15:07:55 +00:00
Star work on Multiple Workspaces, Improve Networks
Android version 1.0.5
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user