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

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.

主站蜘蛛池模板: 阳原县| 涟源市| 德钦县| 延津县| 乌恰县| 凤城市| 荆州市| 图木舒克市| 寻乌县| 灵台县| 平谷区| 佛教| 尚志市| 阳谷县| 太康县| 资溪县| 平果县| 湛江市| 寿光市| 股票| 梓潼县| 甘孜县| 珠海市| 温州市| 乌鲁木齐县| 琼海市| 延寿县| 津市市| 商都县| 沙雅县| 宜都市| 宜宾县| 海兴县| 乐至县| 信阳市| 环江| 濮阳市| 武山县| 靖宇县| 甘德县| 克东县|