public OSCServer(int port) { AddressOnMessageReceived = new Dictionary <string, EventHandler <OSCMessageReceivedArgs> >(); client = new UdpClient(port); Task.Factory.StartNew(async() => { while (client != null) { while (client.Available == 0) { await Task.Delay(10); } UdpReceiveResult result = await client.ReceiveAsync(); OSCPacket packet = OSCPacket.Parse(result.Buffer); if (packet is OSCBundle) { OSCBundle bundle = packet as OSCBundle; OnBundleReceived(bundle); } else { OSCMessage message = packet as OSCMessage; OnMessageReceived(message); } } }); }
public static OSCPacket Parse(BinaryReader reader) { if (reader.PeekChar() == '#') { // OSC Bundle return(OSCBundle.Parse(reader)); } else { return(OSCMessage.Parse(reader)); } }
private void OnBundleReceived(OSCBundle bundle) { foreach (OSCPacket packet in bundle.Contents) { if (packet is OSCBundle) { OSCBundle subBundle = packet as OSCBundle; OnBundleReceived(subBundle); } else { OSCMessage message = packet as OSCMessage; OnMessageReceived(message); } } }
public static void Main(string[] args) { OSCServer server = new OSCServer(9000); server.DefaultOnMessageReceived += Server_OnMessageReceived; server.AddressOnMessageReceived.Add("/arsehole", (sender, messageArgs) => { Console.Out.WriteLine("special " + messageArgs.Message); }); OSCClient client = new OSCClient("127.0.0.1", 9000); OSCBundle bundle = new OSCBundle(DateTime.Now + TimeSpan.FromSeconds(3), new OSCMessage("/arsehole", "Sent " + DateTime.Now)); client.Send(bundle); while (true) { } }