概述
一、什么是分发器(Dispatcher)
分发器:对数据进行处理后,进行数据分发的中介。主要手段是通过事件的提前注册在分发器内,当被触发时,处理触发者传入的数据,然后传入数据给提前注册好在分发器内的事件,并且回调这些事件。
二、分发器的类结构
1、注册的回调函数定义
public delegate void NetCallBack0();
public delegate void NetCallBack1(Object objcet);
注册的函数类型根据应用的场景不一样,需要设计不一样的函数参数和返回类型。
函数参数可设计为泛型类,该类继承于一个信息基础父类或者接口。以传递数据。
比如:
(1)在网络分发器中,如果使用的是Protobuf协议,参数可以传入,其数据基类。
(2)在UI中的事件分发器中,可以使用组件的基类作为参数,如FairyGui的GObject类。
2、事件类(Bridge)
使用上面定义的委托类型创建一个事件,在事件类中实现添加、删除、调用等功能。
public class Bridge {
//Dispatcher owner;
private event NetCallBack0 _callBack0;
private event NetCallBack1 _callBack1;
//需要多个分发器时可记录归属者
//public Bridge(Dispatcher owner)
//{
//this.owner = owner;
//}
public void Add(NetCallBack0 _callBack) {
this._callBack0 += _callBack;
}
public void Add(NetCallBack1 _callBack)
{
this._callBack1 += _callBack;
}
public void Remove(NetCallBack0 cb) {
this._callBack0 -= cb;
}
public void Call() {
this._callBack0?.Invoke();
}
public void Call(Object obj) {
this._callBack1?.Invoke(obj);
}
public void Remove(NetCallBack1 cb)
{
this._callBack1 -= cb;
}
}
3、监听者(Listener)
监听者自身拥有一个事件类(Bridge),以及一个类型(type)。这个类型与事件类绑定,这样就可通过注册时申请的类型做绑定。
class Listener
{
Bridge _bridge;
string _type;
public Listener(Dispatcher own, string type) {
this._bridge = own.GetBridge(type);
this._type = type;
}
}
4、分发器(Dispatch)
分发器内通过一个字典管理监听者(Listener),在分发器内注册监听者,通过一个类型添加到字典,并且(创建监听者)添加事件。
public interface IDispatcher
{
public void AddListener(string type, NetCallBack0 callBack);
public void AddListener(string type, NetCallBack1 callBack);
public void RemoveListener(string type, NetCallBack0 callBack);
public void RemoveListener(string type, NetCallBack1 callBack);
}
public class Dispatcher : IDispatcher
{
Dictionary<string, Bridge> dic;
public Bridge GetBridge(string type) {
Bridge bridge = null;
if (dic == null) {
dic = new Dictionary<string, Bridge>();
}
if (!dic.TryGetValue(type, out bridge)) {
bridge = new Bridge();
dic.Add(type, bridge);
}
return bridge;
}
public void AddListener(string type, NetCallBack0 callback)
{
GetBridge(type).Add(callback);
}
public void AddListener(string type, NetCallBack1 callback)
{
GetBridge(type).Add(callback);
}
public void DispatchEvent(string type) {
GetBridge(type).Call();
}
public void DispatchEvent(string type, Object obj)
{
GetBridge(type).Call(obj);
}
public void RemoveListener(string type, NetCallBack0 callBack0)
{
Bridge bridge = null;
if (dic.TryGetValue(type, out bridge)) {
bridge.Remove(callBack0);
}
}
public void RemoveListener(string type, NetCallBack1 callBack0)
{
Bridge bridge = null;
if (dic.TryGetValue(type, out bridge))
{
bridge.Remove(callBack0);
}
}
}
上面只一个简单的框架,根据不同的需求需要更多的类和更复杂的结构。
比如在网络的分发器中,还需要添加对数据的反序列化和序列化功能的类。
以上是个人的总结,如果有其他想法,欢迎多沟通多交流,提前感谢大哥能给在下一个交流的机会。
最后
以上就是背后外套为你收集整理的分析分发器的基础结构(C#)一、什么是分发器(Dispatcher)二、分发器的类结构的全部内容,希望文章能够帮你解决分析分发器的基础结构(C#)一、什么是分发器(Dispatcher)二、分发器的类结构所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复