From 6473b1bb5e5e2dadd6881f7e03ebbdef4bf43f33 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Mon, 5 Dec 2022 14:39:24 -0600 Subject: [PATCH] rever to old TCP method with new decode logic --- Droid/packages.config | 1 - Droid/qController.Droid.csproj | 3 - iOS/packages.config | 1 - iOS/qController.iOS.csproj | 7 +- .../Communication/SharpOSC/TCPClient.cs | 148 +++++++++--------- qController.Standard/qController.csproj | 1 - 6 files changed, 73 insertions(+), 88 deletions(-) diff --git a/Droid/packages.config b/Droid/packages.config index c9848d0..0927b86 100644 --- a/Droid/packages.config +++ b/Droid/packages.config @@ -13,7 +13,6 @@ - diff --git a/Droid/qController.Droid.csproj b/Droid/qController.Droid.csproj index cf48256..2ce821f 100644 --- a/Droid/qController.Droid.csproj +++ b/Droid/qController.Droid.csproj @@ -468,9 +468,6 @@ ..\packages\Xamarin.AndroidX.Concurrent.Futures.1.1.0.5\lib\monoandroid90\Xamarin.AndroidX.Concurrent.Futures.dll - - ..\packages\SuperSimpleTcp.3.0.5\lib\netstandard2.1\SuperSimpleTcp.dll - diff --git a/iOS/packages.config b/iOS/packages.config index d6c4b6f..b96d33a 100644 --- a/iOS/packages.config +++ b/iOS/packages.config @@ -10,7 +10,6 @@ - diff --git a/iOS/qController.iOS.csproj b/iOS/qController.iOS.csproj index 375b1cf..789c405 100644 --- a/iOS/qController.iOS.csproj +++ b/iOS/qController.iOS.csproj @@ -21,7 +21,7 @@ DEBUG;ENABLE_TEST_CLOUD; prompt 4 - iPhone Developer: Joel Wetzell (5E8CU66YWB) + iPhone Developer true true true @@ -30,7 +30,7 @@ x86_64 HttpClientHandler x86 - qController Dev + Automatic true @@ -152,9 +152,6 @@ ..\packages\Xamarin.Forms.5.0.0.2515\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll - - ..\packages\SuperSimpleTcp.3.0.5\lib\netstandard2.1\SuperSimpleTcp.dll - diff --git a/qController.Standard/Classes/Communication/SharpOSC/TCPClient.cs b/qController.Standard/Classes/Communication/SharpOSC/TCPClient.cs index ae0cb54..b8775b5 100644 --- a/qController.Standard/Classes/Communication/SharpOSC/TCPClient.cs +++ b/qController.Standard/Classes/Communication/SharpOSC/TCPClient.cs @@ -5,7 +5,6 @@ using System.Text; using System.Net.Sockets; using System.Threading; using Serilog; -using SuperSimpleTcp; namespace SharpOSC { @@ -20,8 +19,6 @@ namespace SharpOSC public class TCPClient { - private ILogger _log = Log.Logger.ForContext(); - public int Port { get { return _port; } @@ -35,10 +32,10 @@ namespace SharpOSC public delegate void MessageReceivedHandler(object source, MessageEventArgs args); public event MessageReceivedHandler MessageReceived; + private Thread receivingThread; + string _address; - - SimpleTcpClient tcpClient; - + TcpClient client; public TCPClient(string address, int port) @@ -49,81 +46,28 @@ namespace SharpOSC public bool Connect() { - try { - tcpClient = new SimpleTcpClient(Address, Port); - tcpClient.Events.Connected += ClientConnected; - tcpClient.Events.DataReceived += DataReceived; - tcpClient.Events.Disconnected += ClientDisconneted; - tcpClient.Logger += TCPLog; - tcpClient.Connect(); + client = new TcpClient(Address, Port); + receivingThread = new Thread(ReceiveLoop); + receivingThread.Start(); + + Log.Debug($"[tcpclient] connected to <{Address}:{Port}>"); return true; } catch (Exception e) { - _log.Error(e.Message); + Log.Error(e.Message); return false; } } - private void TCPLog(string obj) - { - _log.Verbose($"{obj}"); - } - - private void ClientDisconneted(object sender, ConnectionEventArgs e) - { - _log.Verbose($"{e.IpPort} client disconnected: {e.Reason}"); - Close(); - } - - private void DataReceived(object sender, DataReceivedEventArgs e) - { - - _log.Verbose($"Raw Data Received contents: {Encoding.UTF8.GetString(e.Data.Array, 0, e.Data.Count)}"); - _log.Verbose($"Raw Data Received size: {e.Data.Count}"); - List messages = SlipFrame.Decode(e.Data.Array); - _log.Verbose($"Slip decoded {messages.Count} osc messages"); - foreach (var message in messages) - { - _log.Verbose($"Raw message contents: {Encoding.UTF8.GetString(message, 0, message.Length)}"); - try - { - OscPacket packet = OscPacket.GetPacket(message); - OscMessage responseMessage = (OscMessage)packet; - if (packet == null) - { - _log.Error("packet is null"); - } - - if (responseMessage == null) - { - _log.Error("responeMessage is null"); - } - - _log.Debug($"OSC Message Received: {responseMessage.Address}"); - OnMessageReceived(responseMessage); - _log.Debug($"After OnMessageReceived Event"); - - } - catch (Exception ex) - { - _log.Error($"Exception parsing OSC message: {ex.ToString()}"); - } - } - } - - private void ClientConnected(object sender, ConnectionEventArgs e) - { - _log.Debug($"connected to <{Address}:{Port}>"); - } - public void Send(byte[] message) { byte[] slipData = SlipFrame.Encode(message); - tcpClient.Send(slipData.ToArray()); + NetworkStream netStream = client.GetStream(); + netStream.Write(slipData.ToArray(), 0, slipData.ToArray().Length); } public void Send(OscPacket packet) @@ -136,25 +80,75 @@ namespace SharpOSC { get { - if (tcpClient == null) + if (client == null) return false; else - return tcpClient.IsConnected; + return client.Connected; + } + } + + public void ReceiveLoop() + { + while (client != null && client.Connected) + { + Receive(); + } + //Log.Debug("[tcpclient] - ReceiveLoop has exited"); + } + + public void Receive() + { + Random random = new Random(); + int num = random.Next(1000); + try + { + NetworkStream netStream = client.GetStream(); + netStream.ReadTimeout = 250; + List responseData = new List(); + 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); + reads += 1; + Thread.Sleep(1); + //Log.Debug("Thread " + num + ": Bytes read: " + bytesRead + " - " + Encoding.UTF8.GetString(buffer)); + } while (netStream.DataAvailable); + + List messages = SlipFrame.Decode(responseData.ToArray()); + + foreach (byte[] message in messages) + { + OscPacket packet = OscPacket.GetPacket(message); + OscMessage responseMessage = (OscMessage)packet; + //watch.Stop(); + //Console.WriteLine($"TCPCLient - message receive took {watch.ElapsedMilliseconds}ms and {reads} reads"); + OnMessageReceived(responseMessage); + } + //Console.WriteLine("Raw TCP In: " + System.Text.Encoding.UTF8.GetString(responseData.ToArray())); + } + } + catch (Exception e) + { + //Console.WriteLine("TCPSENDER - Receive Exception: " + e.ToString()); } } public void Close() { - if (tcpClient != null) + if (client != null) { - tcpClient.Events.Connected -= ClientConnected; - tcpClient.Events.DataReceived -= DataReceived; - tcpClient.Events.Disconnected -= ClientDisconneted; - if (tcpClient.IsConnected) + if (client.Connected) { - _log.Debug($"closing connection to {Address}"); - tcpClient.Disconnect(); - tcpClient.Dispose(); + Log.Debug($"[tcpClient] closing connection to {Address}"); + client.GetStream().Close(); + client.Close(); } } } diff --git a/qController.Standard/qController.csproj b/qController.Standard/qController.csproj index 62e9078..656c247 100644 --- a/qController.Standard/qController.csproj +++ b/qController.Standard/qController.csproj @@ -69,7 +69,6 @@ -