public void WithMultipleRegisteredTypes_OnlyReactCorrectlyTypedMessage() { string firstMessage = "Not set"; string secondMessage = "Not set"; string doNotTouchMessage = "Should not be changed."; var messenger = new MessageAggregator(); messenger.Subscribe<TestMessage>(m => firstMessage = m.ExampleMessage); messenger.Subscribe<TestMessage>(m => secondMessage = m.ExampleMessage); messenger.Subscribe<NotUsedTestMessage>(m => doNotTouchMessage = "This should not happen."); messenger.Publish(new TestMessage { ExampleMessage = "Message example." }); firstMessage.Should().Be("Message example."); secondMessage.Should().Be("Message example."); doNotTouchMessage.Should().Be("Should not be changed."); }
public void Publishes_to_multiple_handlers() { var aggregator = new MessageAggregator(); var publisher = new MessagePublisher(aggregator); var handler1 = 0; var handler2 = 0; aggregator.Subscribe <StringMessage>(e => { handler1++; }); aggregator.Subscribe <StringMessage>(e => { handler2++; }); var sent = publisher.Publish(new StringMessage("Foo")); Assert.True(sent); Assert.Equal(1, handler1); Assert.Equal(1, handler2); }
public ReportViewModel(IRepository dataSource, MessageAggregator messegenger) { Null.CheckArgument(() => dataSource); Null.CheckArgument(() => messegenger); _dataSource = dataSource; CarImages = new ObservableCollection<CarImage>(); messegenger.Subscribe<FiltersAppliedMessage>(UpdateData); }
public void RegisterWithSingleConsumer_WorksTogether() { string message = "Not set"; var messenger = new MessageAggregator(); messenger.Subscribe<TestMessage>(m => message = m.ExampleMessage); messenger.Publish(new TestMessage {ExampleMessage = "Message example."}); message.Should().Be("Message example."); }
public void Flow_manifold_type() { var aggregator = new MessageAggregator(); var publisher = new MessagePublisher(aggregator); aggregator.Subscribe(new ManifoldHandler()); for (var i = 0; i < trials; i++) { publisher.Publish(new SubMessage()); } }
public void Flow_single_type() { var aggregator = new MessageAggregator(); var publisher = new MessagePublisher(aggregator); aggregator.Subscribe(new DoNothingHandler()); for (var i = 0; i < trials; i++) { publisher.Publish(new BaseMessage()); } }
public void Publishes_to_handler() { var aggregator = new MessageAggregator(); var publisher = new MessagePublisher(aggregator); var handled = 0; aggregator.Subscribe <StringMessage>(se => { handled++; }); var sent = publisher.Publish(new StringMessage("Foo")); Assert.True(sent); Assert.Equal(1, handled); }
public void Can_subscribe_with_manifold_hierarchical_consumer() { var aggregator = new MessageAggregator(); var publisher = new MessagePublisher(aggregator); var handler = new ManifoldHierarchicalMessageHandler(); aggregator.Subscribe(handler); var sent = publisher.Publish(new InheritedMessage()); Assert.True(sent); Assert.Equal(1, handler.HandledInterface); Assert.Equal(1, handler.HandledBase); Assert.Equal(1, handler.HandledInherited); }
public void Publishes_to_manifold_handler() { var aggregator = new MessageAggregator(); var publisher = new MessagePublisher(aggregator); var handler = new ManifoldMessageHandler(); aggregator.Subscribe(handler); var sent = publisher.Publish(new StringMessage("Foo")); Assert.True(sent); Assert.Equal(1, handler.HandledString); Assert.Equal(0, handler.HandledInteger); sent = publisher.Publish(new IntegerMessage(123)); Assert.True(sent); Assert.Equal(1, handler.HandledString); Assert.Equal(1, handler.HandledInteger); }
public void Subscribe <TMessage, TMessageHandler>() where TMessage : class where TMessageHandler : IMessageHandler <TMessage> { _messageAggregator.Subscribe <TMessage, TMessageHandler>(); }
private async void Start() { var aggregator = new MessageAggregator(); _relay = aggregator; IConfigStore configStore = new AppDataConfigStore(); IPreviewImageStore previewStore = new AppDataPreviewImageStore(); _library = new Library(configStore, _previewBuilder, previewStore, _relay); var factory = new ImportFolderFactory(_library); // Main View var progressModel = new ProgressModel(); var applicationModel = new ApplicationModel(_relay); var searchViewModel = new SearchModel(_library, _relay); var itemsViewModel = new ItemsModel(_library, _relay); // Main Menu var importFoldersViewModel = new ImportFoldersModel(configStore, factory, _relay); var savedSearchesViewModel = new SavedSearchesModel(configStore, _relay); var collectionsViewModel = new CollectionsModel(configStore, _relay); // Detail Menu var detailMenuModel = new DetailMenuModel(_library, _relay); // Dialogs var addSavedSearchViewModel = new AddSavedSearchModel(_relay); var addImportFolderViewModel = new AddImportFolderModel(_relay); var applicationSettingsModel = new ApplicationSettingsModel(configStore); var userFeedbackModel = new UserFeedbackModel(); var exitingModel = new ExitingModel(_library, OnShutdownComplete); var editScreenModel = new EditScreenModel(_library); BindViewModels(); BindSettings(); // Wire up misc items _disposables.Add(importFoldersViewModel); _editScreen.MainView = _mainGroup; // Also restores app settings for import etc. await applicationSettingsModel.InitializeAsync(); await _library.InitializeAsync(); InitializeViewModelsAsync(); aggregator.Subscribe( // Main View progressModel, searchViewModel, itemsViewModel, // Main Menu importFoldersViewModel, savedSearchesViewModel, collectionsViewModel, // DetailMenu detailMenuModel, // Dialogs addSavedSearchViewModel, addImportFolderViewModel, applicationSettingsModel, userFeedbackModel, exitingModel, editScreenModel); void BindViewModels() { // Main View _progressView.BindTo(progressModel); _applicationView.BindTo(applicationModel); _searchView.BindTo(searchViewModel); _libraryView.BindTo(itemsViewModel); // Main Menu _importFoldersView.BindTo(importFoldersViewModel); _savedSearchesView.BindTo(savedSearchesViewModel); _collectionsView.BindTo(collectionsViewModel); // Detail Menu _detailMenu.BindTo(detailMenuModel); // Dialogs _addImportFolderDialog.BindTo(addImportFolderViewModel); _addSavedSearchDialog.BindTo(addSavedSearchViewModel); _applicationSettingsDialog.BindTo(applicationSettingsModel); _userFeedbackDialog.BindTo(userFeedbackModel); _exitingDialog.BindTo(exitingModel); _editScreen.BindTo(editScreenModel); } void BindSettings() { var rt = applicationSettingsModel.RuntimeSettings; rt.ImportParallelism.ValueChanged += factor => _library.Parallelism = factor; rt.LogLevel.ValueChanged += logLevel => UnityLogger.LogLevel = logLevel; rt.UiScalePercent.ValueChanged += factor => { foreach (var canvas in FindObjectsOfType <Canvas>()) { canvas.scaleFactor = applicationSettingsModel.UiScalePercent / 125f; } }; rt.ScrollSensitivity.ValueChanged += sensitivity => { foreach (var area in FindObjectsOfType <ScrollRect>()) { area.scrollSensitivity = sensitivity; } }; rt.PreviewResolution.ValueChanged += res => _previewBuilder.PreviewResolution.Value = Mathf.RoundToInt(Mathf.Pow(2f, res)); rt.PreviewJpegQuality.ValueChanged += quality => _previewBuilder.Quality = quality; } async void InitializeViewModelsAsync() { await savedSearchesViewModel.InitializeAsync(); await importFoldersViewModel.InitializeAsync(); await collectionsViewModel.InitializeAsync(); } }