Exemple #1
0
        public void TestByteCallback()
        {
            bool cbCalled = false;
            // The cabllback function
            HandleBytePacket cb = delegate(byte[] packet)
            {
                var msg = (OscMessage)OscPacket.GetPacket(packet);
                Assert.AreEqual(2, msg.Arguments.Count);
                Assert.AreEqual(23, msg.Arguments[0]);
                Assert.AreEqual("hello world", msg.Arguments[1]);
                cbCalled = true;
            };

            var l1 = new UDPListener(55555, cb);

            var sender = new SharpOSC.UDPSender("localhost", 55555);
            var msg1   = new SharpOSC.OscMessage("/test/address", 23, "hello world");

            sender.Send(msg1);

            // Wait until callback processes its message
            var start = DateTime.Now;

            while (cbCalled == false && start.AddSeconds(2) > DateTime.Now)
            {
                Thread.Sleep(1);
            }

            Assert.IsTrue(cbCalled);

            l1.Close();
        }
Exemple #2
0
        public void StartListening()
        {
            StopListening();
            this.Client = new UdpClient(Port);

            Task.Run(async() => {
                var endpoint = new IPEndPoint(IPAddress.Any, Port);
                try
                {
                    //TODO: this is an initial version, i feel like this can be done more elegant? (atleast async, not thread blocking like now)
                    while (true)
                    {
                        try
                        {
                            var result = await Client.ReceiveAsync();
                            var bytes  = result.Buffer;

                            var message = OscPacket.GetPacket(bytes) as OscMessage;

                            var musePacket = ParsePacket(message);
                            if (musePacket.Address == SignalAddress.Unknown)
                            {
                                Console.WriteLine($"unknown packet with address '{message.Address}', skipping it...");
                                continue;
                            }

                            PacketReceived?.Invoke(this, musePacket);
                        }
                        catch (ObjectDisposedException)
                        {
                            Console.WriteLine("disposed early");
                            throw;
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine($"Corrupt packet received: '{ex.Message}'");
                        }
                    }
                }
                catch (ObjectDisposedException) {
                    //is fine, atm this is the escape condition when the listener needs to stop listening to the port. far from elegant but it works i suppose :)
                    Console.WriteLine("exited");
                }
                catch (SocketException e)
                {
                    Console.WriteLine(e);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("something else threw an exception... " + ex.Message);
                }
                finally
                {
                    this.Client?.Dispose();
                    this.Client = null;
                }
            });
        }
Exemple #3
0
        public void TestLong()
        {
            long num   = 123456789012345;
            var  msg   = new OscMessage("/test/1", num);
            var  bytes = msg.GetBytes();

            var msg2 = (OscMessage)OscPacket.GetPacket(bytes);

            Assert.AreEqual(num, msg2.Arguments[0]);
        }
Exemple #4
0
        public void TestNoAddress()
        {
            var msg   = new OscMessage("", 9999, 24.24f);
            var bytes = msg.GetBytes();

            var msg2 = (OscMessage)OscPacket.GetPacket(bytes);

            Assert.AreEqual("", msg2.Address);
            Assert.AreEqual(9999, msg2.Arguments[0]);
            Assert.AreEqual(24.24f, msg2.Arguments[1]);
        }
Exemple #5
0
        public void TestDouble()
        {
            double val = 1234567.2324521e36;

            var msg   = new OscMessage("/test/1", val);
            var bytes = msg.GetBytes();

            var msg2 = (OscMessage)OscPacket.GetPacket(bytes);

            Assert.AreEqual(val, ((double)msg2.Arguments[0]));
        }
Exemple #6
0
        public void TestTimetag()
        {
            var val = DateTime.Now;
            var tag = new Timetag(val);

            var msg   = new OscMessage("/test/1", tag);
            var bytes = msg.GetBytes();

            var msg2 = (OscMessage)OscPacket.GetPacket(bytes);

            Assert.AreEqual(tag.Tag, ((Timetag)msg2.Arguments[0]).Tag);
        }
Exemple #7
0
        public void TestBlob()
        {
            var blob = new byte[5] {
                23, 65, 255, 12, 6
            };

            var msg   = new OscMessage("/test/1", blob);
            var bytes = msg.GetBytes();

            var msg2 = (OscMessage)OscPacket.GetPacket(bytes);

            Assert.AreEqual(blob, ((byte[])msg2.Arguments[0]));
        }
Exemple #8
0
        public void TestArray()
        {
            var list = new List <object>()
            {
                23, true, "hello world"
            };
            var msg   = new OscMessage("/test/1", 9999, list, 24.24f);
            var bytes = msg.GetBytes();

            var msg2 = (OscMessage)OscPacket.GetPacket(bytes);

            Assert.AreEqual(9999, msg2.Arguments[0]);
            Assert.AreEqual(list, msg2.Arguments[1]);
            Assert.AreEqual(list.Count, ((List <object>)(msg2.Arguments[1])).Count);
            Assert.AreEqual(24.24f, msg2.Arguments[2]);
        }
Exemple #9
0
 private void ProcessOscMessage(byte[] bytes)
 {
     try
     {
         var msg = OscPacket.GetPacket(bytes) as OscMessage;
         Console.WriteLine(msg.ToString());
         if (msg.Address.StartsWith("/Control/"))
         {
             vm.ProcessControlMessage(msg);
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.GetTrace());
     }
 }