Exemplo n.º 1
0
 public ExSerialParser(ISubscribeManager subscribeManager, IListFileParser listFileParser)
 {
     this.listFileParser = listFileParser;
    
     this.subscribeManager = subscribeManager;
     patern = @"href='(?<ReferensToFiles>.*?)'><img src='(?<TitleImage>.*?)'.*?alt='(?<Name>.*?)'>.*?</span></small><p>(?<Info>.*?)<p>(<a href|<small>).*?(Ф|')(?<folder>.*?)размер: (?<Size>.*?)$";
 }
Exemplo n.º 2
0
        public void 購読登録処理_タグあり_カテゴリ()
        {
            // 設定
            var pnsHandle           = "pnsHandle";
            var subscribeCategories = new List <SubscribeCategory>()
            {
            };

            subscribeCategories.Add(new SubscribeCategory("JapaneseFood", "和食", false));
            subscribeCategories.Add(new SubscribeCategory("FrenchFood", "フレンチ", false));
            subscribeCategories.Add(new SubscribeCategory("ChineseFood", "中華", true));

            this.notificationHub = new Mock <INotificationHub>();
            this.notificationHub.Setup(m => m.RegisterTemplate(pnsHandle, It.IsAny <List <string> >()));
            this.notificationHubManager.SetNotificationHub(this.notificationHub.Object);
            this.authHelper.Setup(m => m.GetToken(It.Is <string>(p => p == Constant.TokenKey))).Returns(pnsHandle);
            this.subscribeManager = new SubscribeManager(this.authHelper.Object);

            // 実行
            this.subscribeManager.Register(subscribeCategories);

            // 検証
            this.authHelper.Verify(m => m.GetToken(Constant.TokenKey));
            this.notificationHub.Verify(m => m.RegisterTemplate(pnsHandle, It.Is <List <string> >(a => a[0] == subscribeCategories[2].Name)));
        }
Exemplo n.º 3
0
        public override void Initialize(WebSocketAcceptContext acceptContext)
        {
            base.Initialize(acceptContext);

            _aliveKey = acceptContext.Option.AliveKey;

            //开启消息订阅,使用aliveKey作为通道
            _subscribeMgr = acceptContext.ServiceProvider.TryGetService <ISubscribeManager>();
            _cacheMgr     = acceptContext.ServiceProvider.TryGetService <IDistributedCacheManager>();

            if (_cacheMgr == null)
            {
                throw new NotSupportedException("必须使用分布式缓存组件。");
            }

            _subscribeMgr.AddSubscriber <DistributedInvokeMessage>(_aliveKey, msg =>
            {
                try
                {
                    //收到消息后,在本地查找连接,并发送消息
                    Clients(msg.Connections.ToArray()).SendAsync(msg.Message.Method, msg.Message.Arguments);
                }
                catch { }
            });
        }
Exemplo n.º 4
0
 public void TearDown()
 {
     this.authHelper = null;
     this.notificationHubManager.Init();
     this.notificationHub = new Mock <INotificationHub>();
     this.notificationHubManager.SetNotificationHub(this.notificationHub.Object);
     this.subscribeManager = null;
 }
Exemplo n.º 5
0
        /// <summary>
        /// 添加一个订阅者实例。
        /// </summary>
        /// <typeparam name="TSubject"></typeparam>
        /// <param name="subscribeMgr"><see cref="ISubscribeManager"/> 实例。</param>
        /// <param name="subscriber">主题订阅者。</param>
        /// <returns></returns>
        public static ISubscribeManager AddSubscriber <TSubject>(this ISubscribeManager subscribeMgr, ISubscriber <TSubject> subscriber) where TSubject : class
        {
            Guard.ArgumentNull(subscribeMgr, nameof(subscribeMgr));
            Guard.ArgumentNull(subscriber, nameof(subscriber));

            subscribeMgr.AddSubscriber <TSubject>(subject => subscriber.Accept(subject));
            return(subscribeMgr);
        }
Exemplo n.º 6
0
 public DistributedUserClientProxy(ISubscribeManager _subscribeMgr, string aliveKey, string connectionId)
 {
     this._subscribeMgr = _subscribeMgr;
     _aliveKey          = aliveKey;
     _connections       = new List <string> {
         connectionId
     };
 }
Exemplo n.º 7
0
 /// <summary> RabbitMQ事件总线 </summary>
 /// <param name="connection"></param>
 /// <param name="subsManager"></param>
 /// <param name="messageCodec"></param>
 public EventBusRabbitMq(IRabbitMqConnection connection, ISubscribeManager subsManager, IMessageCodec messageCodec)
     : base(subsManager, messageCodec, connection?.Name)
 {
     _connection =
         connection ?? throw new ArgumentNullException(nameof(connection));
     _brokerName = connection.Broker;
     _logger     = CurrentIocManager.CreateLogger <EventBusRabbitMq>();
     SubscriptionManager.OnEventRemoved += SubsManager_OnEventRemoved;
 }
Exemplo n.º 8
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="navigationService">NavigationSerivce</param>
        /// <param name="subscribeManager">SubscribeManager</param>
        public MenuPageViewModel(INavigationService navigationService, ISubscribeManager subscribeManager) : base(navigationService)
        {
            this.Title = Message.PageTitle.MenuPage;
            this.PushRegisterCommand.Subscribe(async() => await this.NavigationService.NavigateAsync(Constant.PageName.PushRegisterPage));
            this.PushManagerCommand.Subscribe(async() => await this.NavigationService.NavigateAsync(Constant.PageName.PushManagerPage));

            // トークン登録処理
            this.subscribeManager = subscribeManager;
            this.subscribeManager.Register();
        }
Exemplo n.º 9
0
        public Controller(ISerialsSearch serialsSearch, DownLoadManagerModel downLoadManagerModel, ISubscribeManager subscribeManager, IListFileParser listFileParser)
        {
            SerialsSearch = serialsSearch;
            DownLoadManagerModel = downLoadManagerModel;
            SubscribeManager = subscribeManager;
            saver = new Saver((SubscribeManager)subscribeManager);
            SubscribeManager.SerialModelsCollection = saver.Load(listFileParser);

            this.listFileParser = listFileParser;
              Application.Current.MainWindow.Closed += MainWindow_Closed;
        }
Exemplo n.º 10
0
        /// <summary>
        /// 注册订阅器。
        /// </summary>
        /// <param name="serviceProvider">应用程序服务实例。</param>
        /// <param name="subscribeMgr">指定订阅管理器。</param>
        /// <param name="types">可被注册为订阅器的类型集合。</param>
        /// <param name="activator">创建订阅器实例的方法,一般是从 <paramref name="serviceProvider"/> 里获取。</param>
        internal static void RegisterSubscribers(IServiceProvider serviceProvider, ISubscribeManager subscribeMgr, IEnumerable <Type> types, Func <IServiceProvider, Type, object> activator)
        {
            foreach (var type in types)
            {
                Type subType = null;
                if ((subType = type.GetInterfaces().FirstOrDefault(s => s.IsGenericType && s.GetGenericTypeDefinition() == typeof(ISubscriber <>))) != null)
                {
                    subType = subType.GetGenericArguments()[0];
                    subscribeMgr.AddSubscriber(subType, new Action <object>(o =>
                    {
                        var method = type.GetMethod(nameof(ISubscriber <string> .Accept));
                        if (method != null)
                        {
                            using var scope = serviceProvider.TryCreateScope();
                            var instance    = activator(scope?.ServiceProvider ?? serviceProvider, type);
                            if (instance != null)
                            {
                                method.FastInvoke(instance, new[] { o });
                            }

                            instance.TryDispose();
                        }
                    }));
                }
                else if (type.IsImplementInterface(typeof(ISubscribeHandler)))
                {
                    foreach (var method in type.GetMethods(BindingFlags.Public | BindingFlags.Instance))
                    {
                        if (method.DeclaringType != type)
                        {
                            continue;
                        }

                        var parameters = method.GetParameters();
                        if (parameters.Length != 1)
                        {
                            continue;
                        }

                        subscribeMgr.AddSubscriber(parameters[0].ParameterType, new Action <object>(o =>
                        {
                            using var scope = serviceProvider.TryCreateScope();
                            var instance    = activator(scope?.ServiceProvider ?? serviceProvider, type);
                            if (instance != null)
                            {
                                method.FastInvoke(instance, new[] { o });

                                instance.TryDispose();
                            }
                        }));
                    }
                }
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// 在指定的程序集中发现 <see cref="ISubscriber&lt;TSubject&gt;"/> 的实现。
        /// </summary>
        /// <typeparam name="TSubject"></typeparam>
        /// <param name="subscribeMgr"><see cref="ISubscribeManager"/> 实例。</param>
        /// <param name="assembly">指定的程序集。</param>
        /// <returns></returns>
        public static ISubscribeManager Discovery <TSubject>(this ISubscribeManager subscribeMgr, Assembly assembly) where TSubject : class
        {
            Guard.ArgumentNull(subscribeMgr, nameof(subscribeMgr));
            Guard.ArgumentNull(assembly, nameof(assembly));

            foreach (var type in assembly.GetExportedTypes().Where(s => !s.IsInterface && !s.IsAbstract && s.IsImplementInterface(typeof(ISubscriber <TSubject>))))
            {
                subscribeMgr.AddSubscriber <TSubject>(subject => type.New <ISubscriber <TSubject> >().Accept(subject));
            }

            return(subscribeMgr);
        }
Exemplo n.º 12
0
 public DefaultMessageBus(
     ITransportSender transport,
     IMessageSerializer messageSerializer,
     ISubscribeManager subscribeManager,
     ILoggerFactory loggerFactory
     )
 {
     _transport        = transport ?? throw new ArgumentNullException(nameof(ITransportSender));
     _serializer       = messageSerializer ?? throw new ArgumentNullException(nameof(IMessageSerializer));
     _subscribeManager = subscribeManager ?? throw new ArgumentNullException(nameof(ISubscribeManager));
     _logger           = loggerFactory.CreateLogger <IMessageBus>();
 }
Exemplo n.º 13
0
        /// <summary>
        /// 在指定的程序集中发现 <see cref="ISubscriber{TSubject}"/> 及 <see cref="ISubscribeHandler"/> 的实现。
        /// </summary>
        /// <param name="subscribeMgr"><see cref="ISubscribeManager"/> 实例。</param>
        /// <param name="assembly">指定的程序集。</param>
        /// <returns></returns>
        public static ISubscribeManager AddSubscribers(this ISubscribeManager subscribeMgr, Assembly assembly)
        {
            if (subscribeMgr != null && assembly != null)
            {
                var container = ContainerUnity.GetContainer();
                var types     = Helper.DiscoveryTypes(assembly);
                types.ForEach(s => container.Register(s, s, Lifetime.Scoped));

                Helper.RegisterSubscribers(container, subscribeMgr, types, (sp, type) => sp.GetService(type));
            }

            return(subscribeMgr);
        }
        /// <summary>
        /// constructor
        /// </summary>
        /// <param name="navigationService">navigationService</param>
        /// <param name="pageDialogService">pageDialogService</param>
        /// <param name="subscribeManager">subscribeManager</param>
        public PushRegisterPageViewModel(INavigationService navigationService, IPageDialogService pageDialogService, ISubscribeManager subscribeManager) : base(navigationService)
        {
            this.pageDialogService = pageDialogService;
            this.subscribeManager  = subscribeManager;
            this.Title             = Message.PageTitle.PushRegisterPage;
            this.ButtonTypes.Value = new string[] { "User", "Category" };

            this.subscribeCategories.Add(new SubscribeCategory("JapaneseFood", "和食", false));
            this.subscribeCategories.Add(new SubscribeCategory("FrenchFood", "フレンチ", false));
            this.subscribeCategories.Add(new SubscribeCategory("ChineseFood", "中華", false));
            this.Categories.Value = this.subscribeCategories;

            this.RegisterCommand.Subscribe(async(x) => await this.RegisterPushAsync(x));
        }
Exemplo n.º 15
0
        public void 購読登録処理_タグなし()
        {
            // 設定
            var pnsHandle = "pnsHandle";

            this.notificationHub = new Mock <INotificationHub>();
            this.notificationHub.Setup(m => m.RegisterTemplate(pnsHandle, It.IsAny <List <string> >()));
            this.notificationHubManager.SetNotificationHub(this.notificationHub.Object);
            this.authHelper.Setup(m => m.GetToken(It.Is <string>(p => p == Constant.TokenKey))).Returns(pnsHandle);
            this.subscribeManager = new SubscribeManager(this.authHelper.Object);

            // 実行
            this.subscribeManager.Register();

            // 検証
            this.authHelper.Verify(m => m.GetToken(Constant.TokenKey));
            this.notificationHub.Verify(m => m.RegisterTemplate(pnsHandle, It.Is <List <string> >(a => a.Count == 0)));
        }
Exemplo n.º 16
0
        /// <summary> 执行事务 </summary>
        /// <param name="manager"></param>
        /// <param name="eventName"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public static async Task ProcessEvent(this ISubscribeManager manager, string eventName, byte[] data)
        {
            var codec = CurrentIocManager.Resolve <IMessageCodec>();

            if (manager.HasSubscriptionsForEvent(eventName))
            {
                var eventType = manager.GetEventTypeByName(eventName);
                var @event    = codec.Decode(data, eventType);
                var handlers  = manager.GetHandlersForEvent(eventName);

                foreach (var handlerfactory in handlers)
                {
                    var handler      = handlerfactory.DynamicInvoke();
                    var concreteType = typeof(IEventHandler <>).MakeGenericType(eventType);
                    var method       = concreteType.GetMethod("Handle");
                    if (method == null)
                    {
                        continue;
                    }
                    await(Task) method.Invoke(handler, new[] { @event });
                }
            }
        }
Exemplo n.º 17
0
        public void 購読登録処理_タグあり_ユーザ名()
        {
            // 設定
            var pnsHandle     = "pnsHandle";
            var subscribeUser = new SubscribeUser()
            {
                Name = "fujitsu"
            };
            var tag = Constant.Push.Tags.UserNamePrefix + subscribeUser.Name;

            this.notificationHub = new Mock <INotificationHub>();
            this.notificationHub.Setup(m => m.RegisterTemplate(pnsHandle, It.IsAny <List <string> >()));
            this.notificationHubManager.SetNotificationHub(this.notificationHub.Object);
            this.authHelper.Setup(m => m.GetToken(It.Is <string>(p => p == Constant.TokenKey))).Returns(pnsHandle);
            this.subscribeManager = new SubscribeManager(this.authHelper.Object);

            // 実行
            this.subscribeManager.Register(subscribeUser);

            // 検証
            this.authHelper.Verify(m => m.GetToken(Constant.TokenKey));
            this.notificationHub.Verify(m => m.RegisterTemplate(pnsHandle, It.Is <List <string> >(a => a[0] == tag)));
        }
Exemplo n.º 18
0
 public MQCommandTracker(ISubscribeManager subMgr)
 {
     this.subMgr = subMgr;
 }
 internal protected InnerSubscribeManager(Type contextType = null)
 {
     subMgr = contextType != null ? new SynchronizedSubscribeManager() : SynchronizedSubscribeManager.Instance;
 }
Exemplo n.º 20
0
 protected AbstractEventBus(ISubscribeManager manager, IMessageCodec messageCodec, string name = null)
 {
     SubscriptionManager = manager ?? new DefaultSubscribeManager();
     Codec = messageCodec;
     Name  = name;
 }
Exemplo n.º 21
0
 public SubscriptionController(ISubscribeManager subscriptionManager, IStateValueManagement stateValueManager, ILogger <HomeControllerLogCategory> logger)
 {
     _subscriptionManager = subscriptionManager;
     _stateValueManager   = stateValueManager;
     _logger = logger;
 }