架构_消息机制

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);
        }
    }
}
posted @ 2022-02-25 16:42  匿鱼  阅读(16)  评论(0)    收藏  举报