Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions CoreOSC/IOscListener.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
using System.Net;
using System.Threading;
using System.Threading.Tasks;

namespace LucHeart.CoreOSC;

public interface IOscListener
{
public Task<OscMessage> ReceiveMessageAsync();
public Task<OscMessage> ReceiveMessageAsync(CancellationToken ct);

public Task<(OscMessage Message, IPEndPoint EndPoint)> ReceiveMessageExAsync();
public Task<(OscMessage Message, IPEndPoint EndPoint)> ReceiveMessageExAsync(CancellationToken ct);

public Task<OscBundle> ReceiveBundleAsync();
public Task<OscBundle> ReceiveBundleAsync(CancellationToken ct);

public Task<(OscBundle Bundle, IPEndPoint EndPoint)> ReceiveBundleExAsync();
public Task<(OscBundle Bundle, IPEndPoint EndPoint)> ReceiveBundleExAsync(CancellationToken ct);
}
30 changes: 25 additions & 5 deletions CoreOSC/OscListener.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Threading.Tasks;

namespace LucHeart.CoreOSC;
Expand Down Expand Up @@ -42,14 +43,18 @@ public OscListener(IPEndPoint listenerEndPoint)
}
}

public async Task<OscMessage> ReceiveMessageAsync()
public async Task<OscMessage> ReceiveMessageAsync(CancellationToken ct = default)
{
if (EnableTransparentBundleToMessageConversion)
{
if (MessageQueue.Count > 0)
return MessageQueue.Dequeue();

#if !NETSTANDARD
var receiveResult = await UdpClient.ReceiveAsync(ct);
#else
var receiveResult = await UdpClient.ReceiveAsync();
#endif

if (!OscBundle.IsBundle(receiveResult.Buffer))
return OscMessage.ParseMessage(receiveResult.Buffer);
Expand All @@ -62,29 +67,44 @@ public async Task<OscMessage> ReceiveMessageAsync()
}
else
{
#if !NETSTANDARD
var receiveResult = await UdpClient.ReceiveAsync(ct);
#else
var receiveResult = await UdpClient.ReceiveAsync();
#endif
return OscMessage.ParseMessage(receiveResult.Buffer);
}
}

public async Task<(OscMessage Message, IPEndPoint EndPoint)> ReceiveMessageExAsync()
public async Task<(OscMessage Message, IPEndPoint EndPoint)> ReceiveMessageExAsync(CancellationToken ct = default)
{
#if !NETSTANDARD
var receiveResult = await UdpClient.ReceiveAsync(ct);
#else
var receiveResult = await UdpClient.ReceiveAsync();
#endif
return (OscMessage.ParseMessage(receiveResult.Buffer), receiveResult.RemoteEndPoint);
}

public async Task<OscBundle> ReceiveBundleAsync()
public async Task<OscBundle> ReceiveBundleAsync(CancellationToken ct = default)
{
#if !NETSTANDARD
var receiveResult = await UdpClient.ReceiveAsync(ct);
#else
var receiveResult = await UdpClient.ReceiveAsync();
#endif
return OscBundle.ParseBundle(receiveResult.Buffer);
}

public async Task<(OscBundle Bundle, IPEndPoint EndPoint)> ReceiveBundleExAsync()
public async Task<(OscBundle Bundle, IPEndPoint EndPoint)> ReceiveBundleExAsync(CancellationToken ct = default)
{
#if !NETSTANDARD
var receiveResult = await UdpClient.ReceiveAsync(ct);
#else
var receiveResult = await UdpClient.ReceiveAsync();
#endif
return (OscBundle.ParseBundle(receiveResult.Buffer), receiveResult.RemoteEndPoint);
}

public void Dispose()
{
UdpClient.Dispose();
Expand Down