/// <summary>
        /// Initializes a new instance of the <see cref="PlayerClient"/> class. Connets to the already
        /// running instance.
        /// </summary>
        /// <param name="Port">The port number that the server is listening on</param>
        /// <exception cref="SocketException">when some connection problems occur</exception>
        public PlayerClient(int Port)
        {
            this.Connection = new ServerConnection(Port);

            this.softwareModule = new SoftwareModule(this.Connection);
            this.playlistModule = new PlaylistModule(this.Connection);
            this.playbackModule = new PlaybackModule(this.Connection);
            this.lyricsModule   = new LyricsModule(this.Connection);
        }
Exemple #2
0
        /// <summary>
        /// Starts the asynchronous.
        /// </summary>
        /// <param name="allowShutdown">if set to <c>true</c> [allow shutdown].</param>
        /// <returns>
        /// An async task.
        /// </returns>
        public async Task StartAsync(bool allowShutdown)
        {
            this.logger.Verbose("Create GpioConnectionDriverFactory");
            var gpioConnectionDriverFactory = this.CreateGpioConnectionDriverFactory();

            // Create Startup Module
            this.logger.Verbose("Create Startup module");
            var startupModuleFactory = this.CreateStartupModule(this.application, gpioConnectionDriverFactory);
            var startupModule        = await startupModuleFactory.StartupModule.ConfigureAwait(false);

            this.logger.Verbose("Navigate to Startup view");
            await startupModule.NavigateToStartupViewAsync().ConfigureAwait(false);

            // Create required ApplicationServices-required system boundaries modules
            this.logger.Verbose("Create Repositories Module");
            var repositoriesModule = this.CreateRepositoriesModule();

            this.logger.Verbose("Initialize Repositories Module");
            var repositoriesModuleTask = repositoriesModule.InitializeAsync().ConfigureAwait(false);

            // Create domain required application modules
            this.logger.Verbose("Create LastPlaylist Module");
            var lastPlaylistModule = new LastPlaylistModule(repositoriesModule.LastPlaylistRepository);

            // Create domain modules
            this.logger.Verbose("Create Playlist Module");
            var playlistModule = new PlaylistModule(lastPlaylistModule.LastPlaylistChangeHandler);

            // Create application required system boundaries modules
            this.logger.Verbose("Create Controls Module");
            var controlsModuleFactory = this.CreateControlsModule(gpioConnectionDriverFactory);
            var controlsModule        = await controlsModuleFactory.ControlsModule;

            // Create music control module.
            var musicControlModule = this.CreateMusicControlModule();
            await musicControlModule.InitializeAsync().ConfigureAwait(false);

            this.logger.Verbose("Create System services");
            var systemServicesModule = this.CreateSystemServicesModule();
            await systemServicesModule.InitializeAsync().ConfigureAwait(false);

            // Create application modules
            this.logger.Verbose("Create Player Module");
            var playerModule = this.CreatePlayerModule(repositoriesModule, playlistModule, musicControlModule);
            await playerModule.InitializeAsync().ConfigureAwait(false);

            this.logger.Verbose("Create Volume Module");
            var volumeModule = new VolumeModule(
                controlsModule.Amplifier,
                musicControlModule.MusicPlayer,
                musicControlModule.MusicPlayer,
                repositoriesModule.VolumeRepository,
                new Percentage(0.05),
                new VolumeServiceLogger(this.logger));
            await repositoriesModuleTask;
            await volumeModule.InitializeAsync().ConfigureAwait(false);

            // Create user interface modules
            this.logger.Verbose("Create UserInterface Module");
            var userInterfaceModule = new UserInterfaceModule(
                this.application,
                startupModule,
                controlsModule,
                musicControlModule.MusicPlayer,
                playerModule,
                volumeModule,
                allowShutdown,
                startupModule.LifecycleConfiguration,
                await repositoriesModule.ConfigurationRepository.GetConfigurationAsync().ConfigureAwait(false),
                new Reporters(
                    new InteractionControllerLogger(this.logger),
                    new SystemActivityAggregatorLogger(this.logger),
                    new IdleMonitorLogger(this.logger),
                    new PlayerControllerLogger(this.logger),
                    new VolumeControllerLogger(this.logger),
                    new ShutdownControllerLogger(this.logger),
                    new ViewNavigatorLogger(this.logger),
                    new DisplayStateControllerLogger(this.logger),
                    this.disposableLogger));

            this.disposer = new Disposer(
                this.disposableLogger,
                new DisposeAction(async() => await repositoriesModule.PlaylistRepository.SaveAsync().ConfigureAwait(false)),
                userInterfaceModule,
                musicControlModule,
                controlsModuleFactory,
                startupModuleFactory,
                gpioConnectionDriverFactory);

            this.logger.Verbose("Initialize Playlist Module");
            await playlistModule.InitializeAsync().ConfigureAwait(false);

            this.logger.Verbose("Initialize UserInterface Module");
            await userInterfaceModule.InitializeAsync().ConfigureAwait(false);

            await userInterfaceModule.ViewNavigator.NavigateToPlayerViewAsync().ConfigureAwait(false);
        }
Exemple #3
0
 /// <summary>
 /// Creates the player module.
 /// </summary>
 /// <param name="repositoriesModule">The repositories module.</param>
 /// <param name="playlistModule">The playlist module.</param>
 /// <param name="musicControlModule">The music control module.</param>
 /// <returns>A <see cref="PlayerModule"/>.</returns>
 protected virtual PlayerModule CreatePlayerModule(IRepositoriesModule repositoriesModule, PlaylistModule playlistModule, MusicControlModule musicControlModule)
 {
     return(new PlayerModule(
                repositoriesModule.PlaylistRepository,
                playlistModule.LastPlaylistService,
                musicControlModule.MusicPlayer,
                new PlayerServiceLogger(this.logger)));
 }
Exemple #4
0
 protected override PlayerModule CreatePlayerModule(IRepositoriesModule repositoriesModule, PlaylistModule playlistModule, MusicControlModule musicControlModule)
 {
     return(new TestPlayerModule(repositoriesModule.PlaylistRepository, playlistModule.LastPlaylistService, musicControlModule.MusicPlayer, null));
 }