private void _RegisterMessage(string messageName, IExtentionMetaInfo extention, MessageCallback callback) { if (!mSubscribeList.ContainsKey(messageName)) { mSubscribeList.TryAdd(messageName, new LinkedList <MessageQueueItem> ()); } LinkedList <MessageQueueItem> queue; if (mSubscribeList.TryGetValue(messageName, out queue)) { string extentionName = ""; if (extention != null) { extentionName = extention.Name; } var r = from u in queue where u.ExtentionName == extentionName && u.callback == callback select u; if (r.Count() == 0) { queue.AddLast(new MessageQueueItem { callback = callback, ExtentionName = extentionName }); } } }
/// <summary> /// 登録したコールバックを解除する /// </summary> /// <param name="messageName">メッセージ名</param> /// <param name="extention"></param> /// <param name="callback">解除するコールバック関数</param> public void UnegisterMessage(string messageName, IExtentionMetaInfo extention, MessageCallback callback) { if (!mSubscribeList.ContainsKey(messageName)) { return; } LinkedList <MessageQueueItem> queue; if (mSubscribeList.TryGetValue(messageName, out queue)) { var r = from u in queue where u.ExtentionName == extention.Name select u; foreach (var queueItem in r.ToArray()) { if (queueItem.callback == callback) { queue.Remove(queueItem); } } } }
/// <summary> /// メッセージの呼び出しに対応するコールバックを登録する(拡張機能向け) /// </summary> public void RegisterMessage(string messageName, IExtentionMetaInfo extention, MessageCallback callback) { _RegisterMessage(messageName, extention, callback); }