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 @@
-