Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }