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

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.

主站蜘蛛池模板: 扶绥县| 舒城县| 黑河市| 苗栗市| 阆中市| 江川县| 高州市| 瓮安县| 宜章县| 长汀县| 勃利县| 绥滨县| 交城县| 邵阳市| 光山县| 镇平县| 徐州市| 南投市| 卫辉市| 卓资县| 永善县| 乐安县| 宜君县| 将乐县| 芦山县| 昔阳县| 来宾市| 临潭县| 珠海市| 泸西县| 颍上县| 广宁县| 团风县| 苗栗市| 特克斯县| 汝州市| 大竹县| 衡东县| 利津县| 伊金霍洛旗| 当阳市|