官术网_书友最值得收藏!

Implementing the Messaging System

Let's define our Messaging System by deriving from the SingletonComponent class and provide a method for objects to register with it:

using System.Collections.Generic;
using UnityEngine;

public class MessagingSystem : SingletonComponent<MessagingSystem> {
public static MessagingSystem Instance {
get { return ((MessagingSystem)_Instance); }
set { _Instance = value; }
}

private Dictionary<string,List<MessageHandlerDelegate>> _listenerDict = new Dictionary<string,List<MessageHandlerDelegate>>();

public bool AttachListener(System.Type type, MessageHandlerDelegate handler) {
if (type == null) {
Debug.Log("MessagingSystem: AttachListener failed due to having no " +
"message type specified");
return false;
}

string msgType = type.Name;
if (!_listenerDict.ContainsKey(msgType)) {
_listenerDict.Add(msgType, new List<MessageHandlerDelegate>());
}

List<MessageHandlerDelegate> listenerList = _listenerDict[msgType];
if (listenerList.Contains(handler)) {
return false; // listener already in list
}

listenerList.Add(handler);
return true;
}
}

The _listenerDict field is a dictionary of strings mapped to lists containing MessageHandlerDelegate. This dictionary organizes our listener delegates into lists by which message type they wish to listen to. Thus, if we know what message type is being sent, then we can quickly retrieve a list of all delegates that have been registered for that message type. We can then iterate through the list, querying each listener to check whether one of them wants to handle it.

The AttachListener() method requires two parameters: a message type in the form of its System.Type and a MessageHandlerDelegate to send the message to when the given message type comes through the system.

主站蜘蛛池模板: 翁牛特旗| 关岭| 彭山县| 德昌县| 文山县| 景泰县| 木里| 巴楚县| 开阳县| 连江县| 嘉峪关市| 渭南市| 申扎县| 新龙县| 泰顺县| 杨浦区| 札达县| 梨树县| 福贡县| 上林县| 七台河市| 南川市| 吴忠市| 青岛市| 台北县| 镇安县| 基隆市| 宝清县| 上饶县| 江达县| 留坝县| 静安区| 霍邱县| 修武县| 昌都县| 仪陇县| 饶平县| 洪洞县| 壶关县| 浙江省| 团风县|