Skip to content

Instantly share code, notes, and snippets.

@frostney
Created January 10, 2014 21:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save frostney/8363027 to your computer and use it in GitHub Desktop.
Save frostney/8363027 to your computer and use it in GitHub Desktop.
EventMap in C#
public class EventMap
{
public delegate void SenderEvent(object sender);
public delegate void Event();
protected Dictionary<String, ArrayList> events;
public object Sender { get; set; }
public EventMap ()
{
events = new Dictionary<String, ArrayList>();
Sender = this;
}
public void AddListener (String Name, SenderEvent ev)
{
ArrayList value;
if (!events.TryGetValue(Name, out value)) {
events.Add (Name, new ArrayList());
}
events [Name].Add (ev);
}
public void AddListener(String Name, Event ev)
{
AddListener(Name, ((object sender) => ev()));
}
public void RemoveListener (String Name)
{
ArrayList value;
if (events.TryGetValue(Name, out value)) {
events.Remove (Name);
}
}
public void Trigger(String Name)
{
ArrayList value;
if (events.TryGetValue(Name, out value)) {
foreach (SenderEvent ev in value) {
ev (Sender);
}
}
}
}
public class GenericEventMap<T>
{
public delegate void SenderEvent(object sender, T data);
public delegate void Event(T data);
protected Dictionary<String, ArrayList> events;
public object Sender { get; set; }
public GenericEventMap ()
{
events = new Dictionary<String, ArrayList>();
Sender = this;
}
public void AddListener (String Name, SenderEvent ev)
{
ArrayList value;
if (!events.TryGetValue(Name, out value)) {
events.Add (Name, new ArrayList());
}
events [Name].Add (ev);
}
public void AddListener(String Name, Event ev)
{
AddListener(Name, ((object sender, T data) => ev(data)));
}
public void RemoveListener (String Name)
{
ArrayList value;
if (events.TryGetValue(Name, out value)) {
events.Remove (Name);
}
}
public void Trigger(String Name, T data)
{
ArrayList value;
if (events.TryGetValue(Name, out value)) {
foreach (SenderEvent ev in value) {
ev (Sender, data);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment