From a6b48814f17bab43b33a6ba121fd46b8a487ee75 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Fri, 7 Jan 2022 18:46:28 -0600 Subject: [PATCH] * TCPClient.cs: Add send queue * packages.config: * qController.Droid.csproj: Update dependencies --- Droid/packages.config | 8 ++-- Droid/qController.Droid.csproj | 18 +++---- .../Communication/SharpOSC/TCPClient.cs | 47 +++++++++++++++---- 3 files changed, 53 insertions(+), 20 deletions(-) diff --git a/Droid/packages.config b/Droid/packages.config index 045a647..96f034e 100644 --- a/Droid/packages.config +++ b/Droid/packages.config @@ -158,11 +158,11 @@ - - - + + + - + diff --git a/Droid/qController.Droid.csproj b/Droid/qController.Droid.csproj index 7a3a5d8..55e76c9 100644 --- a/Droid/qController.Droid.csproj +++ b/Droid/qController.Droid.csproj @@ -32,6 +32,7 @@ true + true true @@ -53,6 +54,7 @@ armeabi-v7a;x86;arm64-v8a;x86_64 + true @@ -447,13 +449,13 @@ ..\packages\Xamarin.AndroidX.Tracing.Tracing.1.0.0.3\lib\monoandroid90\Xamarin.AndroidX.Tracing.Tracing.dll - ..\packages\Xamarin.AndroidX.Navigation.Common.2.3.5.1\lib\monoandroid90\Xamarin.AndroidX.Navigation.Common.dll + ..\packages\Xamarin.AndroidX.Navigation.Common.2.3.5.3\lib\monoandroid90\Xamarin.AndroidX.Navigation.Common.dll - ..\packages\Xamarin.AndroidX.Navigation.Runtime.2.3.5.1\lib\monoandroid90\Xamarin.AndroidX.Navigation.Runtime.dll + ..\packages\Xamarin.AndroidX.Navigation.Runtime.2.3.5.3\lib\monoandroid90\Xamarin.AndroidX.Navigation.Runtime.dll - ..\packages\Xamarin.AndroidX.Preference.1.1.1.9\lib\monoandroid90\Xamarin.AndroidX.Preference.dll + ..\packages\Xamarin.AndroidX.Preference.1.1.1.11\lib\monoandroid90\Xamarin.AndroidX.Preference.dll ..\packages\Xamarin.Firebase.Encoders.117.0.0.3\lib\monoandroid90\Xamarin.Firebase.Encoders.dll @@ -462,7 +464,7 @@ ..\packages\Xamarin.Firebase.Encoders.JSON.118.0.0.3\lib\monoandroid90\Xamarin.Firebase.Encoders.JSON.dll - ..\packages\Xamarin.AndroidX.Navigation.UI.2.3.5.1\lib\monoandroid90\Xamarin.AndroidX.Navigation.UI.dll + ..\packages\Xamarin.AndroidX.Navigation.UI.2.3.5.3\lib\monoandroid90\Xamarin.AndroidX.Navigation.UI.dll ..\packages\Xamarin.AndroidX.Concurrent.Futures.1.1.0.5\lib\monoandroid90\Xamarin.AndroidX.Concurrent.Futures.dll @@ -574,8 +576,6 @@ - - @@ -589,14 +589,12 @@ - - @@ -608,4 +606,8 @@ + + + + \ No newline at end of file diff --git a/qController.Standard/Classes/Communication/SharpOSC/TCPClient.cs b/qController.Standard/Classes/Communication/SharpOSC/TCPClient.cs index b0176b7..4ae1853 100644 --- a/qController.Standard/Classes/Communication/SharpOSC/TCPClient.cs +++ b/qController.Standard/Classes/Communication/SharpOSC/TCPClient.cs @@ -31,7 +31,12 @@ namespace SharpOSC } public delegate void MessageReceivedHandler(object source, MessageEventArgs args); public event MessageReceivedHandler MessageReceived; + + private Queue SendQueue = new Queue(); + private Thread receivingThread; + private Thread sendThread; + string _address; TcpClient client; @@ -54,6 +59,10 @@ namespace SharpOSC client = new TcpClient(Address, Port); receivingThread = new Thread(ReceiveLoop); receivingThread.Start(); + + sendThread = new Thread(SendLoop); + sendThread.Start(); + Log.Debug($"[tcpclient] connected to <{Address}:{Port}>"); return true; } @@ -65,6 +74,23 @@ namespace SharpOSC } + public void QueueForSending(OscPacket packet) + { + SendQueue.Enqueue(packet); + } + + private void SendLoop() + { + while (client != null && client.Connected) + { + if (SendQueue.Count > 0) + { + OscPacket packet = SendQueue.Dequeue(); + Send(packet); + } + } + } + public void Send(byte[] message) { byte[] slipData = SlipEncode(message); @@ -82,17 +108,20 @@ namespace SharpOSC { get { - return client.Connected; + if (client == null) + return false; + else + return client.Connected; } } public void ReceiveLoop() { - while (client.Connected) + while (client != null && client.Connected) { Receive(); } - Console.WriteLine("TCPClient - Receive Loop has exited for some reason"); + //Log.Debug("[tcpclient] - ReceiveLoop has exited"); } public void Receive() @@ -121,14 +150,16 @@ namespace SharpOSC } while (netStream.DataAvailable); //Console.WriteLine("Raw TCP In: " + System.Text.Encoding.UTF8.GetString(responseData.ToArray())); - OscMessage response = (OscMessage)OscPacket.GetPacket(responseData.Skip(1).ToArray()); + OscPacket packet = OscPacket.GetPacket(responseData.Skip(1).ToArray()); + OscMessage responseMessage = (OscMessage)packet; //watch.Stop(); //Console.WriteLine($"TCPCLient - message receive took {watch.ElapsedMilliseconds}ms and {reads} reads"); - OnMessageReceived(response); + OnMessageReceived(responseMessage); } - } catch(Exception e) + } + catch (Exception e) { - //Log.Debug("TCPClient - Receive Exception: " + e.ToString()); + //Console.WriteLine("TCPSENDER - Receive Exception: " + e.ToString()); } } @@ -178,4 +209,4 @@ namespace SharpOSC MessageReceived?.Invoke(this, new MessageEventArgs() { Message = msg }); } } -} +} \ No newline at end of file