mirror of
https://github.com/jwetzell/qController.git
synced 2026-08-04 15:07:55 +00:00
149 lines
5.2 KiB
C#
149 lines
5.2 KiB
C#
//Class used to facilitate communication with a QInstance
|
|
//Listens for incoming messages via qReceiver (UDP) and tcpSender (TCP)
|
|
//WEIRD MESSAGE PARSING RULES NEED FIXED
|
|
|
|
using System;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using SharpOSC;
|
|
using Newtonsoft.Json;
|
|
namespace qController
|
|
{
|
|
public class QClient
|
|
{
|
|
TCPSender tcpSender;
|
|
UDPSender udpSender;
|
|
public QParser qParser;
|
|
public QReceiver qReceiver;
|
|
|
|
string Address;
|
|
int Port;
|
|
|
|
public QClient(string address, int port)
|
|
{
|
|
Address = address;
|
|
Port = port;
|
|
qParser = new QParser();
|
|
qReceiver = new QReceiver(Port + 1);
|
|
tcpSender = new TCPSender(Address, Port);
|
|
udpSender = new UDPSender(Address, Port);
|
|
|
|
tcpSender.MessageReceived += OnMessageReceived;
|
|
qReceiver.UpdateMessageReceived += OnMessageReceived;
|
|
|
|
}
|
|
|
|
//one method for messages received whether from TCP or UDP (SAME MSG FORMAT)
|
|
private void OnMessageReceived(object source, MessageEventArgs args)
|
|
{
|
|
Console.WriteLine("QCLIENT MESSAGE RECEIVED: "+args.Message.Address);
|
|
//try to 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 sendString(string address)
|
|
{
|
|
try
|
|
{
|
|
tcpSender.Send(new OscMessage(address));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("SEND EXCEPTION: " + ex.Message);
|
|
}
|
|
}
|
|
|
|
public void sendArgs(string address, object args)
|
|
{
|
|
try
|
|
{
|
|
tcpSender.Send(new OscMessage(address, args));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("SEND ARGS EXCEPTION: " + ex.Message);
|
|
}
|
|
}
|
|
public void sendStringUDP(string address)
|
|
{
|
|
udpSender = new UDPSender(Address,Port);
|
|
udpSender.Send(new OscMessage(address));
|
|
udpSender.Close();
|
|
}
|
|
public void sendArgsUDP(string address, params object[] args)
|
|
{
|
|
udpSender = new UDPSender(Address, Port);
|
|
udpSender.Send(new OscMessage(address, args));
|
|
udpSender.Close();
|
|
}
|
|
public void sendAndReceiveString(string address)
|
|
{
|
|
try
|
|
{
|
|
tcpSender.SendAndReceive(new OscMessage(address));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("SEND AND RECIEVE EXCEPTION: " + ex.Message);
|
|
}
|
|
}
|
|
|
|
public void sendAndReceiveStringArgs(string address, params object[] args)
|
|
{
|
|
try
|
|
{
|
|
tcpSender.SendAndReceive(new OscMessage(address, args));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("SEND AND RECEIVE ARGS EXCEPTION: " + ex.Message);
|
|
}
|
|
}
|
|
|
|
|
|
public void ProcessUpdate(OscMessage msg)
|
|
{
|
|
Console.WriteLine("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";
|
|
sendAndReceiveStringArgs(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";
|
|
sendAndReceiveStringArgs(address, valuesForKeys);
|
|
}
|
|
|
|
public void UpdateWorkspace(string ws_id)
|
|
{
|
|
Console.WriteLine("Workspace needs to be updated: " + ws_id);
|
|
}
|
|
|
|
public void Close()
|
|
{
|
|
udpSender.Close();
|
|
qReceiver.Close();
|
|
}
|
|
}
|
|
}
|