public class Act {
public Delegate handler;
public void Invoke() {
((Action)handler).Invoke();
}
public void Invoke<T>(T t) {
((Action<T>)handler).Invoke(t);
}
}
public class MessageCenter {
private MessageRegister register = new MessageRegister();
public void Reg(int id, Action a) {
register.Register(id, a);
}
public void Reg<T>(int id, Action<T> a) {
register.Register(id, a);
}
public void UnReg(int id) {
register.UnRegister(id);
}
public void Dis(int id) {
register.Dispatcher(id);
}
public void Dis<T>(int id, T t) {
register.Dispatcher(id, t);
}
}
public class MessageRegister {
private Dictionary<int, Act> temps = new Dictionary<int, Act>();
public void Register(int id, Delegate e) {
if (!temps.TryGetValue(id, out var tmp)) {
temps.Add(id, new Act() {
handler = e
});
}
}
public void UnRegister(int id) {
if (temps.TryGetValue(id, out var tmp)) {
temps.Remove(id);
}
}
public void Dispatcher(int id) {
if (temps.TryGetValue(id, out var tmp)) {
tmp.Invoke();
}
}
public void Dispatcher<T>(int id, T t) {
if (temps.TryGetValue(id, out var tmp)) {
tmp.Invoke(t);
}
}
}