Passage serveur UDP OSC en Asynchrone (suppression ThreadLoop)

This commit is contained in:
Arnaud HOUDELETTE-LANGLOIS 2026-10-29 00:28:09 +01:00
parent ea8ee8040a
commit 0a3b58f73d

View file

@ -3,6 +3,7 @@ using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Threading; using System.Threading;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks;
namespace DMX2 namespace DMX2
{ {
@ -10,42 +11,37 @@ namespace DMX2
{ {
UdpClient udpCli=null; UdpClient udpCli=null;
Thread pollThread = null;
bool running=true;
public OSCServer () public OSCServer ()
{ {
pollThread = new Thread(new ThreadStart(Loop)); udpCli = new UdpClient(7772);
pollThread.Start(); udpCli.BeginReceive(UdpCliReceive,null);
}
void Loop () }
{
udpCli = new UdpClient (7772);
byte[] recv;
IPEndPoint remep = new IPEndPoint (IPAddress.Any, 0);
void UdpCliReceive(IAsyncResult ar)
try { {
while (running) { if (!ar.IsCompleted) return;
recv = udpCli.Receive (ref remep); byte[] recv;
//Console.WriteLine(remep); IPEndPoint remep = new IPEndPoint(IPAddress.Any, 0);
OSCMessage msg = new OSCMessage(recv); recv = udpCli.EndReceive(ar, ref remep);
OSCMessage msg = new OSCMessage(recv);
#if DEBUG #if DEBUG
Console.Write(msg.Address); Console.Write(msg.Address);
Console.Write(" "); Console.Write(" ");
foreach(var arg in msg.Args) foreach (var arg in msg.Args)
Console.WriteLine(arg.GetString()); Console.WriteLine(arg.GetString());
#endif #endif
try{ try
ProcessMessage(msg,remep); {
}catch{} ProcessMessage(msg, remep);
} }
} catch (SocketException ex) { catch { }
} udpCli.BeginReceive(UdpCliReceive, null);
finally { }
}
}
/// <summary> /// <summary>
@ -347,15 +343,8 @@ namespace DMX2
protected virtual void Dispose (bool disposing) protected virtual void Dispose (bool disposing)
{ {
if (disposing) { if (disposing) {
running=false; if(udpCli!=null)
if(udpCli!=null)
udpCli.Close(); udpCli.Close();
if(pollThread!=null)
{
if(!pollThread.Join(100))
pollThread.Abort();
pollThread=null;
}
} }
} }