* QBrowser.cs: Change log levels

* QClient.cs: Change to Queue for TCP sending messages

* QControlKit.csproj:
* Info.plist:
* MainPage.xaml.cs:
* QControlKitXamDemo.csproj:
* QControlKitXamDemo.iOS.csproj:
* QControlKitXamDemo.Android.csproj: Updates

* TCPClient.cs: Start work on send queue for TCP
This commit is contained in:
2021-11-18 00:42:31 -06:00
parent 406bcc9e7f
commit 9601d59d81
9 changed files with 88 additions and 42 deletions
+4
View File
@@ -26,13 +26,17 @@ namespace QControlKit
public async void ProbeForQLabInstances()
{
Log.Debug("[qbrowser] probing for instances");
IReadOnlyList<IZeroconfHost> results = await
ZeroconfResolver.ResolveAsync(QBonjour.TCPService,TimeSpan.FromSeconds(3));
foreach (var zeroconfHost in results)
{
Log.Debug($"[qbrowser] found host {zeroconfHost.IPAddress}:{zeroconfHost.DisplayName}");
foreach (var service in zeroconfHost.Services)
{
Log.Debug($"[qbrowser] found {service.Key}:{service.Value}");
if (service.Key.Equals(QBonjour.TCPService))
{
+1 -1
View File
@@ -59,7 +59,7 @@ namespace QControlKit
public void sendMessage(string address, params object[] args)
{
tcpClient.Send(new OscMessage(address, args));
tcpClient.QueueForSending(new OscMessage(address, args));
Log.Debug($"[client] send message {address} : {args}");
}
+6 -2
View File
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<Authors>Joel Wetzell</Authors>
<Version>1.0.0-devel</Version>
@@ -16,14 +16,18 @@
<ItemGroup>
<PackageReference Include="Serilog" Version="2.10.0" />
<PackageReference Include="Zeroconf" Version="3.5.11" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Zeroconf" Version="3.5.11" />
</ItemGroup>
<ItemGroup>
<Folder Include="Constants\" />
<Folder Include="Cue\" />
<Folder Include="SharpOSC\" />
</ItemGroup>
<ItemGroup>
<None Remove="Cue\" />
<None Remove="SharpOSC" />
<None Remove="Zeroconf" />
<None Remove="SharpOSC\" />
</ItemGroup>
</Project>
+30 -3
View File
@@ -31,7 +31,12 @@ namespace SharpOSC
}
public delegate void MessageReceivedHandler(object source, MessageEventArgs args);
public event MessageReceivedHandler MessageReceived;
private Queue<OscPacket> SendQueue = new Queue<OscPacket>();
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);
@@ -91,7 +117,7 @@ namespace SharpOSC
public void ReceiveLoop()
{
while (client.Connected)
while (client != null && client.Connected)
{
Receive();
}
@@ -124,10 +150,11 @@ 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)
{