예제 #1
0
        /// <summary>
        /// Attach an event listener on to the given address
        /// </summary>
        /// <param name="address">the address of the container</param>
        /// <param name="event">the event to attach</param>
        public void Attach(string address, OscMessageEvent @event)
        {
            if (@event == null)
            {
                throw new ArgumentNullException(nameof(@event));
            }

            // if the address is a literal then add it to the literal lookup
            if (OscAddress.IsValidAddressLiteral(address) == true)
            {
                OscLiteralEvent container = literalAddresses.GetOrAdd(address, func => new OscLiteralEvent(address));

                // attach the event
                container.Event += @event;
            }
            // if the address is a pattern add it to the pattern lookup
            else if (OscAddress.IsValidAddressPattern(address) == true)
            {
                OscAddress oscAddress = new OscAddress(address);

                // add it to the lookup
                OscPatternEvent container = patternAddresses.GetOrAdd(oscAddress, func => new OscPatternEvent(oscAddress));

                // attach the event
                container.Event += @event;
            }
            else
            {
                throw new ArgumentException($"Invalid container address '{address}'", nameof(address));
            }
        }
예제 #2
0
        /// <summary>
        /// Detach an event listener
        /// </summary>
        /// <param name="address">the address of the container</param>
        /// <param name="event">the event to remove</param>
        public void Detach(string address, OscMessageEvent @event)
        {
            if (@event == null)
            {
                throw new ArgumentNullException("event");
            }

            if (OscAddress.IsValidAddressLiteral(address) == true)
            {
                OscLiteralEvent container;

                lock (m_Lock)
                {
                    if (m_LiteralAddresses.TryGetValue(address, out container) == false)
                    {
                        // no container was found so abort
                        return;
                    }
                }
                // unregiser the event
                container.Event -= @event;

                // if the container is now empty remove it from the lookup
                if (container.IsNull == true)
                {
                    m_LiteralAddresses.Remove(container.Address);
                }
            }
            else if (OscAddress.IsValidAddressPattern(address) == true)
            {
                OscPatternEvent container;
                OscAddress      oscAddress = new OscAddress(address);

                lock (m_Lock)
                {
                    if (m_PatternAddresses.TryGetValue(oscAddress, out container) == false)
                    {
                        // no container was found so abort
                        return;
                    }
                }

                // unregiser the event
                container.Event -= @event;

                // if the container is now empty remove it from the lookup
                if (container.IsNull == true)
                {
                    m_PatternAddresses.Remove(container.Address);
                }
            }
            else
            {
                throw new ArgumentException(String.Format(Strings.Container_IsValidContainerAddress, address), "address");
            }
        }
예제 #3
0
        /// <summary>
        /// Attach an event listener on to the given address
        /// </summary>
        /// <param name="address">the address of the contianer</param>
        /// <param name="event">the event to attach</param>
        public void Attach(string address, OscMessageEvent @event)
        {
            if (@event == null)
            {
                throw new ArgumentNullException("event");
            }

            // if the address is a literal then add it to the literal lookup
            if (OscAddress.IsValidAddressLiteral(address) == true)
            {
                OscLiteralEvent container;

                lock (m_Lock)
                {
                    if (m_LiteralAddresses.TryGetValue(address, out container) == false)
                    {
                        // no container was found so create one
                        container = new OscLiteralEvent(address);

                        // add it to the lookup
                        m_LiteralAddresses.Add(address, container);
                    }
                }

                // attach the event
                container.Event += @event;
            }
            // if the address is a pattern add it to the pattern lookup
            else if (OscAddress.IsValidAddressPattern(address) == true)
            {
                OscPatternEvent container;
                OscAddress      oscAddress = new OscAddress(address);

                lock (m_Lock)
                {
                    if (m_PatternAddresses.TryGetValue(oscAddress, out container) == false)
                    {
                        // no container was found so create one
                        container = new OscPatternEvent(oscAddress);

                        // add it to the lookup
                        m_PatternAddresses.Add(oscAddress, container);
                    }
                }

                // attach the event
                container.Event += @event;
            }
            else
            {
                throw new ArgumentException(String.Format(Strings.Container_IsValidContainerAddress, address), "address");
            }
        }
예제 #4
0
 public void AddAction(string pass, UnityAction <object[]> action)
 {
     if (_oscEventMap.ContainsKey(pass))
     {
         _oscEventMap[pass].AddListener(action);
     }
     else
     {
         var oscEvent = new OscMessageEvent();
         oscEvent.AddListener(action);
         _oscEventMap.Add(pass, oscEvent);
     }
 }
예제 #5
0
        /// <summary>
        /// Detach an event listener
        /// </summary>
        /// <param name="address">the address of the container</param>
        /// <param name="event">the event to remove</param>
        public void Detach(string address, OscMessageEvent @event)
        {
            if (@event == null)
            {
                throw new ArgumentNullException(nameof(@event));
            }

            if (OscAddress.IsValidAddressLiteral(address) == true)
            {
                if (literalAddresses.TryGetValue(address, out OscLiteralEvent container) == false)
                {
                    // no container was found so abort
                    return;
                }

                // unregiser the event
                container.Event -= @event;

                // if the container is now empty remove it from the lookup
                if (container.IsNull == true)
                {
                    literalAddresses.TryRemove(container.Address, out container);
                }
            }
            else if (OscAddress.IsValidAddressPattern(address) == true)
            {
                OscAddress oscAddress = new OscAddress(address);

                if (patternAddresses.TryGetValue(oscAddress, out OscPatternEvent container) == false)
                {
                    // no container was found so abort
                    return;
                }

                // unregiser the event
                container.Event -= @event;

                // if the container is now empty remove it from the lookup
                if (container.IsNull == true)
                {
                    patternAddresses.TryRemove(container.Address, out container);
                }
            }
            else
            {
                throw new ArgumentException($"Invalid container address '{address}'", nameof(address));
            }
        }
예제 #6
0
        public void AttachTest()
        {
            try
            {
                using (OscAddressManager target = new OscAddressManager())
                {
                    string address = "/test";

                    OscMessageEvent @event = new OscMessageEvent((OscMessage message) => { Debug.WriteLine(message.ToString()); });

                    target.Attach(address, @event);
                }
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }
        }
예제 #7
0
        public void InvokeTest1_Bad()
        {
            try
            {
                using (OscAddressManager target = new OscAddressManager())
                {
                    string          address = "/test";
                    OscMessageEvent @event  = new OscMessageEvent((OscMessage msg) => { Debug.WriteLine(msg.ToString()); });
                    target.Attach(address, @event);

                    OscBundle bundle   = new OscBundle(DateTime.Now, new OscMessage("/foo"));
                    bool      expected = false;
                    bool      actual;

                    actual = target.Invoke(bundle);

                    Assert.AreEqual(expected, actual);
                }
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }
        }
예제 #8
0
        public void InvokeTest_Good()
        {
            try
            {
                using (OscAddressManager target = new OscAddressManager())
                {
                    string          address = "/test";
                    OscMessageEvent @event  = new OscMessageEvent((OscMessage msg) => { Debug.WriteLine(msg.ToString()); });
                    target.Attach(address, @event);

                    OscMessage message  = new OscMessage("/test");
                    bool       expected = true;
                    bool       actual;

                    actual = target.Invoke(message);

                    Assert.AreEqual(expected, actual);
                }
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.Message);
            }
        }
예제 #9
0
 /// <summary>
 /// Detach an event listener
 /// </summary>
 /// <param name="address">the address of the container</param>
 /// <param name="event">the event to remove</param>
 public void Detach(string address, OscMessageEvent @event)
 {
     OscAddressManager.Detach(address, @event);
 }
예제 #10
0
 /// <summary>
 /// Detach an event listener
 /// </summary>
 /// <param name="address">the address of the container</param>
 /// <param name="event">the event to remove</param>
 public void Detach(string address, OscMessageEvent @event)
 {
     m_Listener.Detach(address, @event);
 }
예제 #11
0
 /// <summary>
 /// Attach an event listener on to the given address.
 /// </summary>
 /// <param name="address">The address of the container.</param>
 /// <param name="event">The event to attach.</param>
 public void Attach(string address, OscMessageEvent @event)
 {
     oscAddressManager.Attach(address, @event);
 }