You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.4 KiB
C#
83 lines
2.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace JwKdsV.Core.MessageEvent
|
|
{
|
|
/// <summary>
|
|
/// 消息事件管理器
|
|
/// </summary>
|
|
public class MsgEventsContainer
|
|
{
|
|
public MsgEventsContainer()
|
|
{
|
|
eventsList = new Dictionary<string , MsgEventProvider>();
|
|
}
|
|
|
|
#region 属性|字段
|
|
private Dictionary<string , MsgEventProvider> eventsList;
|
|
#endregion
|
|
|
|
#region 方法
|
|
|
|
public void AddListener(string msgType , EventHandler<MsgEventArgs> func , object _receiver , bool isOnce)
|
|
{
|
|
if (eventsList.ContainsKey(msgType) == false)
|
|
{
|
|
MsgEventProvider _msgEventProvider = new MsgEventProvider(msgType);
|
|
eventsList.Add(msgType , _msgEventProvider);
|
|
}
|
|
|
|
MsgEventProvider msgEventProvider = eventsList[msgType];
|
|
|
|
#region 构建消息接收对象
|
|
MsgReceiver receiver = new MsgReceiver();
|
|
receiver.IsOnce = isOnce;
|
|
receiver.ReceiverObj = _receiver;
|
|
receiver.appEventHandler = func;
|
|
#endregion
|
|
|
|
msgEventProvider.AddListener(receiver);
|
|
}
|
|
|
|
public void RemoveListener(string msgType , EventHandler<MsgEventArgs> func , object _receiver)
|
|
{
|
|
if (eventsList.ContainsKey(msgType) == false) return;
|
|
|
|
MsgEventProvider msgEventProvider = eventsList[msgType];
|
|
|
|
#region 构建消息接受者对象
|
|
MsgReceiver receiver = new MsgReceiver();
|
|
receiver.IsOnce = true;
|
|
receiver.ReceiverObj = _receiver;
|
|
receiver.appEventHandler = func;
|
|
#endregion
|
|
|
|
msgEventProvider.RemoveListener(receiver);
|
|
}
|
|
|
|
public void Run(Object sender , MsgEventArgs args)
|
|
{
|
|
string msgType = args.EventType;
|
|
|
|
//未存在注册的消息事件,则直接返回
|
|
if (eventsList.ContainsKey(msgType) == false) return;
|
|
|
|
MsgEventProvider msgEventProvider = eventsList[msgType];
|
|
|
|
msgEventProvider.Run(sender , args);
|
|
}
|
|
|
|
public MsgEventProvider GetAllProvider(string msgType)
|
|
{
|
|
if (eventsList.ContainsKey(msgType) == false) return null;
|
|
|
|
return eventsList[msgType];
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|