/// <summary> /// Sends an OSC message to the given UDP address. /// </summary> public void Send(OscMessage message, OscIoDeviceChannel deviceChannel) { if (ReferenceEquals(message, null)) throw new ArgumentNullException("message"); byte[] packet = message.ToOscPacketArray(); IPEndPoint ipEndPoint = deviceChannel != null ? deviceChannel.IPEndPoint : _defaultRemoteEndPoint; OscIoDeviceEventArgs eventArgs = new OscIoDeviceEventArgs(message, new OscIoDeviceChannel( OscIoDeviceChannelType.Udp, ipEndPoint)); // send message _udp.BeginSend(packet, packet.Length, ipEndPoint, OnSend, eventArgs); }
private void OnReceive(IAsyncResult ar) { try { // get the datagram IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); byte[] datagram = _udp.EndReceive(ar, ref remoteEndPoint); // Console.WriteLine("OnReceive"); // Console.WriteLine(Encoding.ASCII.GetString(datagram)); // create an device address for the remote end point OscIoDeviceChannel deviceAddress = new OscIoDeviceChannel(OscIoDeviceChannelType.Udp, remoteEndPoint); IOscElement element = OscParser.Parse(datagram); OscIoDeviceEventArgs eventArgs = null; switch (element.ElementType) { case OscElementType.Message: eventArgs = new OscIoDeviceEventArgs(element as OscMessage, deviceAddress); break; case OscElementType.Bundle: eventArgs = new OscIoDeviceEventArgs(element as OscBundle, deviceAddress); break; } // raise receive event if (DataReceived != null) { DataReceived(this, eventArgs); } } finally { BeginReceive(); } }