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

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. Hence, 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 MessageHandlerDelegate to send the message to when the given message type comes through the system.

主站蜘蛛池模板: 内江市| 邮箱| 遂川县| 犍为县| 布尔津县| 西吉县| 蓬莱市| 杂多县| 高唐县| 哈尔滨市| 昌宁县| 隆化县| 赣州市| 万安县| 马公市| 独山县| 峡江县| 黔西县| 四平市| 辽中县| 宜州市| 宝丰县| 益阳市| 泰来县| 辰溪县| 台东县| 海伦市| 吴忠市| 玉林市| 武隆县| 台中市| 义马市| 满洲里市| 黄山市| 建湖县| 桃园市| 上犹县| 双江| 资阳市| 都昌县| 晋州市|