コード例 #1
0
        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.");
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: ReportViewModel.cs プロジェクト: savpek/CSharp-Demo
        public ReportViewModel(IRepository dataSource, MessageAggregator messegenger)
        {
            Null.CheckArgument(() => dataSource);
            Null.CheckArgument(() => messegenger);

            _dataSource = dataSource;
            CarImages = new ObservableCollection<CarImage>();

            messegenger.Subscribe<FiltersAppliedMessage>(UpdateData);
        }
コード例 #4
0
        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.");
        }
コード例 #5
0
        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());
            }
        }
コード例 #6
0
        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());
            }
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
 public void Subscribe <TMessage, TMessageHandler>()
     where TMessage : class
     where TMessageHandler : IMessageHandler <TMessage>
 {
     _messageAggregator.Subscribe <TMessage, TMessageHandler>();
 }
コード例 #11
0
        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();
            }
        }