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>.*?)$"; }
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))); }
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 { } }); }
public void TearDown() { this.authHelper = null; this.notificationHubManager.Init(); this.notificationHub = new Mock <INotificationHub>(); this.notificationHubManager.SetNotificationHub(this.notificationHub.Object); this.subscribeManager = null; }
/// <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); }
public DistributedUserClientProxy(ISubscribeManager _subscribeMgr, string aliveKey, string connectionId) { this._subscribeMgr = _subscribeMgr; _aliveKey = aliveKey; _connections = new List <string> { connectionId }; }
/// <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; }
/// <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(); }
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; }
/// <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(); } })); } } } }
/// <summary> /// 在指定的程序集中发现 <see cref="ISubscriber<TSubject>"/> 的实现。 /// </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); }
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>(); }
/// <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)); }
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))); }
/// <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 }); } } }
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))); }
public MQCommandTracker(ISubscribeManager subMgr) { this.subMgr = subMgr; }
internal protected InnerSubscribeManager(Type contextType = null) { subMgr = contextType != null ? new SynchronizedSubscribeManager() : SynchronizedSubscribeManager.Instance; }
protected AbstractEventBus(ISubscribeManager manager, IMessageCodec messageCodec, string name = null) { SubscriptionManager = manager ?? new DefaultSubscribeManager(); Codec = messageCodec; Name = name; }
public SubscriptionController(ISubscribeManager subscriptionManager, IStateValueManagement stateValueManager, ILogger <HomeControllerLogCategory> logger) { _subscriptionManager = subscriptionManager; _stateValueManager = stateValueManager; _logger = logger; }