mirror of
https://github.com/jwetzell/qController.git
synced 2026-08-18 13:44:21 +00:00
initial working maui migration with android only
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
//Class used to facilitate communication with a QInstance
|
||||
//Listens for incoming messages via qReceiver (UDP) and tcpClient (TCP)
|
||||
//TODO: WEIRD MESSAGE PARSING RULES NEED FIXED
|
||||
using System;
|
||||
using SharpOSC;
|
||||
using Serilog;
|
||||
|
||||
namespace qController.Communication
|
||||
{
|
||||
public class QClient
|
||||
{
|
||||
private TCPClient tcpClient;
|
||||
public QParser qParser;
|
||||
string Address;
|
||||
int Port;
|
||||
public bool connected;
|
||||
|
||||
public QClient(string address, int port)
|
||||
{
|
||||
Address = address;
|
||||
Port = port;
|
||||
qParser = new QParser();
|
||||
tcpClient = new TCPClient(Address, Port);
|
||||
connected = tcpClient.Connect();
|
||||
tcpClient.MessageReceived += OnMessageReceived;
|
||||
|
||||
}
|
||||
|
||||
//one method for messages received whether from TCP or UDP (SAME MSG FORMAT)
|
||||
private void OnMessageReceived(object source, MessageEventArgs args)
|
||||
{
|
||||
Log.Debug("QCLIENT - Message Received: " + args.Message.Address);
|
||||
|
||||
|
||||
//TODO: find a better filtering process
|
||||
if (!args.Message.Address.Contains("update"))
|
||||
qParser.ParseMessage(args.Message);
|
||||
else if (args.Message.Address.Contains("playbackPosition") || args.Message.Address.Contains("cueList") || args.Message.Address.Contains("dashboard"))
|
||||
qParser.ParseMessage(args.Message);
|
||||
else if (args.Message.Address.Contains("cue_id"))
|
||||
{
|
||||
var parts = args.Message.Address.Split('/');
|
||||
UpdateSpecificCue(parts[3], parts[5]);
|
||||
}
|
||||
else
|
||||
ProcessUpdate(args.Message);
|
||||
}
|
||||
|
||||
public void sendTCP(string address)
|
||||
{
|
||||
//Log.Debug($"QCLIENT - TCP Sent with address: {address}");
|
||||
try
|
||||
{
|
||||
tcpClient.Send(new OscMessage(address));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Debug("QCLIENT - Send and Receive Exception: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendTCP(string address, params object[] args)
|
||||
{
|
||||
//Log.Debug($"QCLIENT - TCP Sent with address: {address}");
|
||||
try
|
||||
{
|
||||
tcpClient.Send(new OscMessage(address, args));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Debug("QCLIENT - Send and Receive w/Args Exception: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void ProcessUpdate(OscMessage msg)
|
||||
{
|
||||
Log.Debug("QCLIENT - Process Update: " + msg.Address);
|
||||
if (msg.Address.Contains("workspace"))
|
||||
{
|
||||
UpdateWorkspace("not yet implemented");
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateSpecificCue(string workspace_id,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 = "/workspace/" + workspace_id + "/cue_id/" + cue_id + "/valuesForKeys";
|
||||
sendTCP(address, valuesForKeys);
|
||||
}
|
||||
|
||||
public void UpdateSelectedCue(string workspace_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 = "/workspace/" + workspace_id + "/cue/selected/valuesForKeys";
|
||||
sendTCP(address, valuesForKeys);
|
||||
}
|
||||
|
||||
public void UpdateWorkspace(string ws_id)
|
||||
{
|
||||
Log.Debug("QCLIENT - Workspace needs to be updated: " + ws_id);
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
tcpClient.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user