/// <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)); } }
/// <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"); } }
/// <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"); } }
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); } }
/// <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)); } }
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); } }
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); } }
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); } }
/// <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); }
/// <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); }
/// <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); }