/// <summary> /// 向消息事件缓存接口中注册新的客户端订阅。 /// </summary> /// <param name="obj">一个消息路由扩展接口的实例对象。</param> /// <param name="key">注册的发布键。</param> /// <param name="action">订阅的客户端消息处理逻辑。</param> /// <param name="identity">当前处理逻辑的标识:可以多个逻辑使用同一个标识。</param> /// <param name="index">消息在处理队列中的顺序:升序处理。</param> /// <param name="filter">服务器消息过滤器.</param> /// <returns>已经完成注册的消息路由扩展接口实例对象。</returns> public static AsyncSubscriber RegisterAsync(this IMessageRouter obj, string key, Action <object> action, object identity = null, double index = 0, Func <object, bool> filter = null) { var subscriber = new AsyncSubscriber { Action = action, Filter = filter, Identity = identity, Index = index, }; obj.Store.GetOrAdd(key, p => new List <ISubscriber>()).Add(subscriber); return(subscriber); }
/// <summary> /// 向消息事件缓存接口中注册新的客户端订阅。 /// </summary> /// <param name="obj">一个消息路由扩展接口的实例对象。</param> /// <param name="action">订阅的客户端消息处理逻辑。</param> /// <param name="identity">当前处理逻辑的标识:可以多个逻辑使用同一个标识。</param> /// <param name="index">消息在处理队列中的顺序:升序处理。</param> /// <param name="filter">服务器消息过滤器.</param> /// <returns>已经完成注册的消息路由扩展接口实例对象。</returns> public static AsyncSubscriber RegisterGlobalAsync(this IMessageRouter obj, Action <object> action, object identity = null, double index = 0, Func <object, bool> filter = null) { var subscriber = new AsyncSubscriber { Action = action, Filter = filter, Identity = identity, Index = index, }; obj.GlobalPublish.Add(subscriber); return(subscriber); }
/// <summary> /// 向消息事件缓存接口中注册新的客户端订阅。 /// </summary> /// <typeparam name="TMessage">客户端订阅的消息类型</typeparam> /// <param name="obj">一个消息路由扩展接口的实例对象。</param> /// <param name="action">订阅的客户端消息处理逻辑。</param> /// <param name="identity">当前处理逻辑的标识:可以多个逻辑使用同一个标识。</param> /// <param name="index">消息在处理队列中的顺序:升序处理。</param> /// <param name="filter">服务器消息过滤器.</param> /// <returns>已经完成注册的消息路由扩展接口实例对象。</returns> public static AsyncSubscriber RegisterAsync <TMessage>(this IMessageRouter obj, Action <object> action, object identity = null, double index = 0, Func <TMessage, bool> filter = null) { Func <object, bool> subscriberFilter = p => p is TMessage; if (filter != null) { subscriberFilter = p => p is TMessage && filter((TMessage)p); } var subscriber = new AsyncSubscriber { Action = action, Filter = subscriberFilter, Identity = identity, Index = index, }; obj.Store.GetOrAdd(typeof(TMessage).AssemblyQualifiedName, p => new List <ISubscriber>()).Add(subscriber); return(subscriber); }