/// <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); }
/// <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); }
/// <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))); }
protected override PlayerModule CreatePlayerModule(IRepositoriesModule repositoriesModule, PlaylistModule playlistModule, MusicControlModule musicControlModule) { return(new TestPlayerModule(repositoriesModule.PlaylistRepository, playlistModule.LastPlaylistService, musicControlModule.MusicPlayer, null)); }