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#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace POSV.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
}
}