From 0a3b58f73d5d528203c683b7015e3ca1c005ae56 Mon Sep 17 00:00:00 2001 From: Arnaud HOUDELETTE-LANGLOIS Date: Thu, 29 Oct 2026 00:28:09 +0100 Subject: [PATCH] Passage serveur UDP OSC en Asynchrone (suppression ThreadLoop) --- DMX-2.0/OSCServer.cs | 63 ++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 37 deletions(-) diff --git a/DMX-2.0/OSCServer.cs b/DMX-2.0/OSCServer.cs index 691390e..44c069a 100644 --- a/DMX-2.0/OSCServer.cs +++ b/DMX-2.0/OSCServer.cs @@ -3,6 +3,7 @@ using System.Net; using System.Net.Sockets; using System.Threading; using System.Collections.Generic; +using System.Threading.Tasks; namespace DMX2 { @@ -10,42 +11,37 @@ namespace DMX2 { UdpClient udpCli=null; - Thread pollThread = null; - bool running=true; + + public OSCServer () { - pollThread = new Thread(new ThreadStart(Loop)); - pollThread.Start(); - } + udpCli = new UdpClient(7772); + udpCli.BeginReceive(UdpCliReceive,null); - void Loop () - { - udpCli = new UdpClient (7772); - byte[] recv; - IPEndPoint remep = new IPEndPoint (IPAddress.Any, 0); + } - - try { - while (running) { - recv = udpCli.Receive (ref remep); - //Console.WriteLine(remep); - OSCMessage msg = new OSCMessage(recv); + void UdpCliReceive(IAsyncResult ar) + { + if (!ar.IsCompleted) return; + byte[] recv; + IPEndPoint remep = new IPEndPoint(IPAddress.Any, 0); + recv = udpCli.EndReceive(ar, ref remep); + OSCMessage msg = new OSCMessage(recv); #if DEBUG - Console.Write(msg.Address); - Console.Write(" "); - foreach(var arg in msg.Args) - Console.WriteLine(arg.GetString()); + Console.Write(msg.Address); + Console.Write(" "); + foreach (var arg in msg.Args) + Console.WriteLine(arg.GetString()); #endif - try{ - ProcessMessage(msg,remep); - }catch{} - } - } catch (SocketException ex) { - } - finally { - } - } + try + { + ProcessMessage(msg, remep); + } + catch { } + udpCli.BeginReceive(UdpCliReceive, null); + } + /// @@ -347,15 +343,8 @@ namespace DMX2 protected virtual void Dispose (bool disposing) { if (disposing) { - running=false; - if(udpCli!=null) + if(udpCli!=null) udpCli.Close(); - if(pollThread!=null) - { - if(!pollThread.Join(100)) - pollThread.Abort(); - pollThread=null; - } } }