mirror of
https://github.com/jwetzell/qController.git
synced 2026-08-19 06:04:12 +00:00
Switch to only TCP Communication
- No more UDP - Lots of random refactoring as well
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
//IMPLEMENT A ISREACHABLE METHOD TO BE ABLE TO DISPLAY ONLINE QINSTANCES
|
||||
using System.Net;
|
||||
|
||||
namespace qController
|
||||
namespace qController.Communication
|
||||
{
|
||||
public class IPHelper
|
||||
{
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
//Class used to facilitate communication with a QInstance
|
||||
//Listens for incoming messages via qReceiver (UDP) and tcpSender (TCP)
|
||||
//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
|
||||
namespace qController.Communication
|
||||
{
|
||||
public class QClient
|
||||
{
|
||||
TCPSender tcpSender;
|
||||
TCPClient tcpClient;
|
||||
UDPSender udpSender;
|
||||
public QParser qParser;
|
||||
public QReceiver qReceiver;
|
||||
@@ -21,13 +21,13 @@ namespace qController
|
||||
Address = address;
|
||||
Port = port;
|
||||
qParser = new QParser();
|
||||
qReceiver = new QReceiver(Port + 1);
|
||||
tcpSender = new TCPSender(Address, Port);
|
||||
tcpSender.Connect();
|
||||
udpSender = new UDPSender(Address, Port);
|
||||
//qReceiver = new QReceiver(Port + 1);
|
||||
tcpClient = new TCPClient(Address, Port);
|
||||
tcpClient.Connect();
|
||||
//udpSender = new UDPSender(Address, Port);
|
||||
|
||||
tcpSender.MessageReceived += OnMessageReceived;
|
||||
qReceiver.UpdateMessageReceived += OnMessageReceived;
|
||||
tcpClient.MessageReceived += OnMessageReceived;
|
||||
//qReceiver.UpdateMessageReceived += OnMessageReceived;
|
||||
|
||||
}
|
||||
|
||||
@@ -51,26 +51,27 @@ namespace qController
|
||||
ProcessUpdate(args.Message);
|
||||
}
|
||||
|
||||
public void sendUDP(string address)
|
||||
{
|
||||
//Log.Debug($"QCLIENT - UDP Sent with address: {address}");
|
||||
udpSender = new UDPSender(Address,Port);
|
||||
udpSender.Send(new OscMessage(address));
|
||||
udpSender.Close();
|
||||
}
|
||||
public void sendUDP(string address, params object[] args)
|
||||
{
|
||||
//Log.Debug($"QCLIENT - UDP Sent with address: {address}");
|
||||
udpSender = new UDPSender(Address, Port);
|
||||
udpSender.Send(new OscMessage(address, args));
|
||||
udpSender.Close();
|
||||
}
|
||||
//public void sendUDP(string address)
|
||||
//{
|
||||
// //Log.Debug($"QCLIENT - UDP Sent with address: {address}");
|
||||
// udpSender = new UDPSender(Address,Port);
|
||||
// udpSender.Send(new OscMessage(address));
|
||||
// udpSender.Close();
|
||||
//}
|
||||
//public void sendUDP(string address, params object[] args)
|
||||
//{
|
||||
// //Log.Debug($"QCLIENT - UDP Sent with address: {address}");
|
||||
// udpSender = new UDPSender(Address, Port);
|
||||
// udpSender.Send(new OscMessage(address, args));
|
||||
// udpSender.Close();
|
||||
//}
|
||||
|
||||
public void sendTCP(string address)
|
||||
{
|
||||
//Log.Debug($"QCLIENT - TCP Sent with address: {address}");
|
||||
try
|
||||
{
|
||||
tcpSender.Send(new OscMessage(address));
|
||||
tcpClient.Send(new OscMessage(address));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -83,7 +84,7 @@ namespace qController
|
||||
//Log.Debug($"QCLIENT - TCP Sent with address: {address}");
|
||||
try
|
||||
{
|
||||
tcpSender.Send(new OscMessage(address, args));
|
||||
tcpClient.Send(new OscMessage(address, args));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -122,8 +123,7 @@ namespace qController
|
||||
|
||||
public void Close()
|
||||
{
|
||||
udpSender.Close();
|
||||
qReceiver.Close();
|
||||
tcpClient.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
//Contains all necessary items to facilitate communication (sending, receiving) to a QLab workspace
|
||||
//Also contains the local QWorkspace object which stores all the information that is used in displaying
|
||||
//TODO: STILL NEED TO WORK ON PASSWORD PROTECTED WORKSPACES
|
||||
using System;
|
||||
using Serilog;
|
||||
using qController.QItems;
|
||||
|
||||
namespace qController
|
||||
namespace qController.Communication
|
||||
{
|
||||
public class QController
|
||||
{
|
||||
@@ -31,26 +31,38 @@ namespace qController
|
||||
{
|
||||
Log.Debug($"QCONTROLLER - Connect Called: {workspace_id}");
|
||||
qWorkspace = new QWorkspace(workspace_id);
|
||||
qClient.sendUDP("/workspace/"+workspace_id+"/connect");
|
||||
qClient.sendTCP("/workspace/"+workspace_id+"/connect");
|
||||
}
|
||||
|
||||
public void Connect(string workspace_id, string passcode)
|
||||
{
|
||||
Log.Debug($"QCONTROLLER - Connect with Passcode Called: {workspace_id}:{passcode}");
|
||||
qWorkspace = new QWorkspace(workspace_id);
|
||||
qClient.sendUDP("/workspace/" + workspace_id + "/connect", passcode);
|
||||
qClient.sendTCP("/workspace/" + workspace_id + "/connect", passcode);
|
||||
|
||||
}
|
||||
|
||||
public void Connect(QWorkspace workspace)
|
||||
{
|
||||
if(workspace.passcode != null)
|
||||
{
|
||||
Connect(workspace.workspace_id, workspace.passcode);
|
||||
}
|
||||
else
|
||||
{
|
||||
Connect(workspace.workspace_id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void KickOff()
|
||||
{
|
||||
qClient.sendUDP("/workspaces");
|
||||
qClient.sendTCP("/workspaces");
|
||||
}
|
||||
|
||||
public void Disconnect()
|
||||
{
|
||||
qClient.sendUDP("/workspace/"+qWorkspace.workspace_id+"/disconnect");
|
||||
qClient.sendTCP("/workspace/"+qWorkspace.workspace_id+"/disconnect");
|
||||
}
|
||||
|
||||
public void Resume()
|
||||
|
||||
@@ -4,7 +4,7 @@ using Serilog;
|
||||
using System.Collections.Generic;
|
||||
using Zeroconf;
|
||||
|
||||
namespace qController
|
||||
namespace qController.Communication
|
||||
{
|
||||
public class QFinder
|
||||
{
|
||||
|
||||
@@ -3,9 +3,10 @@ using SharpOSC;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json;
|
||||
using System.Collections.Generic;
|
||||
using qController.QItems;
|
||||
using Serilog;
|
||||
|
||||
namespace qController
|
||||
namespace qController.Communication
|
||||
{
|
||||
public class CueEventArgs : EventArgs
|
||||
{
|
||||
@@ -184,6 +185,7 @@ namespace qController
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Debug($"QPARSER - Workspace Load Error: {ex.ToString()}");
|
||||
OnWorkspaceLoadError(id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,9 +3,8 @@ using SharpOSC;
|
||||
using System.Threading;
|
||||
using Serilog;
|
||||
|
||||
namespace qController
|
||||
namespace qController.Communication
|
||||
{
|
||||
|
||||
public class QReceiver
|
||||
{
|
||||
public delegate void UpdateMessageReceivedHandler(object source, MessageEventArgs args);
|
||||
|
||||
@@ -5,14 +5,15 @@ using Serilog;
|
||||
using Xamarin.Forms;
|
||||
using Serilog;
|
||||
|
||||
namespace qController
|
||||
namespace qController.Communication
|
||||
{
|
||||
public class QUpdater
|
||||
{
|
||||
|
||||
private bool active = true;
|
||||
private bool started = false;
|
||||
private QController qController;
|
||||
private Thread updateThread;
|
||||
private Thread updateThread;
|
||||
|
||||
public QUpdater(QController controller)
|
||||
{
|
||||
@@ -47,7 +48,15 @@ namespace qController
|
||||
|
||||
public void Start(){
|
||||
Log.Debug("QUPDATER - Start() method called");
|
||||
updateThread.Start();
|
||||
try
|
||||
{
|
||||
//updateThread.Start();
|
||||
Log.Debug("QUPDATER - updateThread started");
|
||||
}
|
||||
catch (ThreadStateException tSe)
|
||||
{
|
||||
Log.Debug("QUPDATER - updateThread already started");
|
||||
}
|
||||
}
|
||||
|
||||
//Attempt at a "keep alive" message
|
||||
@@ -67,7 +76,7 @@ namespace qController
|
||||
if (args.Cue.type == "Group")
|
||||
{
|
||||
//Log.Debug("QUpdater/Updated cue was group cue, sending children request");
|
||||
qController.qClient.sendUDP("/workspace/"+qController.qWorkspace.workspace_id+"/cue_id/" + args.Cue.uniqueID + "/children");
|
||||
qController.qClient.sendTCP("/workspace/"+qController.qWorkspace.workspace_id+"/cue_id/" + args.Cue.uniqueID + "/children");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +105,7 @@ namespace qController
|
||||
public void SendThump()
|
||||
{
|
||||
|
||||
qController.qClient.sendUDP("/workspace/" + qController.qWorkspace.workspace_id + "/thump");
|
||||
qController.qClient.sendTCP("/workspace/" + qController.qWorkspace.workspace_id + "/thump");
|
||||
}
|
||||
|
||||
public void Kill(){
|
||||
|
||||
Executable → Regular
+1
@@ -19,6 +19,7 @@ namespace SharpOSC
|
||||
this.Value = value;
|
||||
}
|
||||
|
||||
override
|
||||
public string ToString()
|
||||
{
|
||||
return Value;
|
||||
|
||||
+10
-5
@@ -17,7 +17,7 @@ namespace SharpOSC
|
||||
}
|
||||
}
|
||||
|
||||
public class TCPSender
|
||||
public class TCPClient
|
||||
{
|
||||
public int Port
|
||||
{
|
||||
@@ -41,7 +41,7 @@ namespace SharpOSC
|
||||
byte ESC_ESC = 0xDD;
|
||||
|
||||
|
||||
public TCPSender(string address, int port)
|
||||
public TCPClient(string address, int port)
|
||||
{
|
||||
_port = port;
|
||||
_address = address;
|
||||
@@ -50,7 +50,7 @@ namespace SharpOSC
|
||||
public void Connect()
|
||||
{
|
||||
client = new TcpClient(Address, Port);
|
||||
Log.Debug($"TCPSender - connect called for <{Address}:{Port}>");
|
||||
Log.Debug($"TCPClient - connect called for <{Address}:{Port}>");
|
||||
Thread receivingThread = new Thread(ReceiveLoop);
|
||||
receivingThread.Start();
|
||||
}
|
||||
@@ -74,7 +74,7 @@ namespace SharpOSC
|
||||
{
|
||||
Receive();
|
||||
}
|
||||
Log.Debug("TCPSender - Receive Loop has exited for some reason");
|
||||
Log.Debug("TCPClient - Receive Loop has exited for some reason");
|
||||
}
|
||||
|
||||
public void Receive()
|
||||
@@ -88,19 +88,24 @@ namespace SharpOSC
|
||||
List<byte> responseData = new List<byte>();
|
||||
if (netStream.CanRead)
|
||||
{
|
||||
//var watch = System.Diagnostics.Stopwatch.StartNew();
|
||||
byte[] buffer = new byte[256];
|
||||
|
||||
int bytesRead = 0;
|
||||
int reads = 0;
|
||||
do
|
||||
{
|
||||
bytesRead = netStream.Read(buffer, 0, buffer.Length);
|
||||
responseData.AddRange(buffer);
|
||||
Thread.Sleep(30);
|
||||
reads += 1;
|
||||
Thread.Sleep(1);
|
||||
//Log.Debug("Thread " + num + ": Bytes read: " + bytesRead + " - " + Encoding.UTF8.GetString(buffer));
|
||||
} while (netStream.DataAvailable);
|
||||
|
||||
//Log.Debug("Raw TCP In: " + System.Text.Encoding.UTF8.GetString(responseData.ToArray()));
|
||||
OscMessage response = (OscMessage)OscPacket.GetPacket(responseData.Skip(1).ToArray());
|
||||
//watch.Stop();
|
||||
//Log.Debug($"TCPCLient - message receive took {watch.ElapsedMilliseconds}ms and {reads} reads");
|
||||
OnMessageReceived(response);
|
||||
}
|
||||
} catch(Exception e)
|
||||
Reference in New Issue
Block a user