コード例 #1
0
        public void Setup()
        {
            // Logging:
            // https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1
            var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder.AddFilter("Default", LogLevel.Debug).AddConsole();
            });
            var logger = loggerFactory.CreateLogger <CustomConfigProvider>();

            _customConfigProvider = new CustomConfigProvider(logger, CONFIG_FILE_PATH);
        }
コード例 #2
0
ファイル: Startup.cs プロジェクト: lzukw/WirelessDisplay
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            // Added Dependency-Injection: Here a Singleton-Instane of ScriptRunner
            // is created. It will be created upn the first API-Reuest and then
            // passed to the constructor of the webapi-Controller, that serves the request.
            services.AddSingleton <ILocalScriptRunner>((s) =>
            {
                // For debugging purposes: Show current working directory, since
                // script-paths are relative
                Console.WriteLine($"Current working-directory is: '{System.IO.Directory.GetCurrentDirectory()}'");

                var logger = s.GetRequiredService <ILogger <LocalScriptRunner> >();
                var loggerForCustomConfig = s.GetRequiredService <ILogger <CustomConfigProvider> >();

                CustomConfigProvider myConfig =
                    new CustomConfigProvider(loggerForCustomConfig, MagicStrings.CONFIG_FILE);

                bool letShellWindowsPopUpWhenStartScript;
                bool success = bool.TryParse(myConfig[MagicStrings.LET_SHELL_WINDOW_POP_UP_WHEN_START_SCRIPT], out letShellWindowsPopUpWhenStartScript);
                if (!success)
                {
                    throw new WDFatalException($"Value '{myConfig[MagicStrings.LET_SHELL_WINDOW_POP_UP_WHEN_START_SCRIPT]}' for key '{MagicStrings.LET_SHELL_WINDOW_POP_UP_WHEN_START_SCRIPT}' in configuration-file '{MagicStrings.CONFIG_FILE}' is not 'true' or 'false'.");
                }

                DirectoryInfo scriptDir =
                    new DirectoryInfo(myConfig[MagicStrings.SCRIPT_DIRECTORY]);
                if (!scriptDir.Exists)
                {
                    string msg = $"FATAL: Cannot find Script-directory '{scriptDir.FullName}'";
                    Console.WriteLine(msg);
                    throw new WDFatalException(msg);
                }
                return(new LocalScriptRunner(logger,
                                             myConfig[MagicStrings.SHELL],
                                             myConfig[MagicStrings.SHELL_ARGS_TEMPLATE],
                                             scriptDir,
                                             myConfig[MagicStrings.SCRIPT_FILE_EXTENSION],
                                             letShellWindowsPopUpWhenStartScript));
            });
        }
コード例 #3
0
//############ Original code from template - end ############################

        /// <summary>
        /// Creates all objects that need to be injected into the constructor
        /// of MainViewModel (prepare Dependency-injection). These created
        /// object themselves need other things injected in their constructors.
        /// This funciton glues all the needed objects together using
        /// dependecy-injection.
        /// </summary>
        private void realizeDependencyInjection(
            out ILogger <MainWindowViewModel> loggerforMainWindowModel,
            out IWDClientServices wdClientServices,
            out string[] streamingTypes,
            out UInt16 preferredServerPort,
            out UInt16 preferredStreamingPort,
            out int preferredLocalScreenWidth,
            out int preferredRemoteScreenWidth)
        {
            // Create typed loggers.
            // See https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1#non-host-console-app
            var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder
                .AddFilter("Microsoft", LogLevel.Warning)
                .AddFilter("System", LogLevel.Warning)
                .AddFilter("Default", LogLevel.Information)
                .AddConsole();
            });

            // Assign out-object logger
            loggerforMainWindowModel = loggerFactory.CreateLogger <MainWindowViewModel>();

            // Create reader for config.json
            var customConfigProviderLogger = loggerFactory.CreateLogger <CustomConfigProvider>();
            var customConfigProvider       = new CustomConfigProvider(customConfigProviderLogger,
                                                                      MagicStrings.CONFIG_FILE);

            // Assign out-objects read from config.json
            string streamtypeList = customConfigProvider[MagicStrings.STREAMING_TYPES];

            streamingTypes = streamtypeList.Split(',', StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < streamingTypes.Length; i++)
            {
                streamingTypes[i] = streamingTypes[i].Trim();
            }

            preferredServerPort = Convert.ToUInt16(
                customConfigProvider[MagicStrings.PREFERRED_SERVER_PORT]);

            preferredStreamingPort = Convert.ToUInt16(
                customConfigProvider[MagicStrings.PREFERRED_STREAMING_PORT]);

            preferredLocalScreenWidth = Convert.ToInt32(
                customConfigProvider[MagicStrings.PREFERRED_LOCAL_SCREEN_WIDTH]);

            preferredRemoteScreenWidth = Convert.ToInt32(
                customConfigProvider[MagicStrings.PREFERRED_REMOTE_SCREEN_WIDTH]);

            bool letShellWindowsPopUpWhenStartScript;
            bool success = bool.TryParse(customConfigProvider[MagicStrings.LET_SHELL_WINDOW_POP_UP_WHEN_START_SCRIPT], out letShellWindowsPopUpWhenStartScript);

            if (!success)
            {
                throw new WDFatalException($"Value '{customConfigProvider[MagicStrings.LET_SHELL_WINDOW_POP_UP_WHEN_START_SCRIPT]}' for key '{MagicStrings.LET_SHELL_WINDOW_POP_UP_WHEN_START_SCRIPT}' in configuration-file '{MagicStrings.CONFIG_FILE}' is not 'true' or 'false'.");
            }

            var loggerForLocalScriptRunner = loggerFactory.CreateLogger <LocalScriptRunner>();
            var scriptDir = new DirectoryInfo(
                customConfigProvider[MagicStrings.SCRIPT_DIRECTORY]);
            var localScriptRunner = new LocalScriptRunner(
                logger: loggerForLocalScriptRunner,
                shell: customConfigProvider[MagicStrings.SHELL],
                shellArgsTemplate: customConfigProvider[MagicStrings.SHELL_ARGS_TEMPLATE],
                scriptDirectory: scriptDir,
                scriptExtension: customConfigProvider[MagicStrings.SCRIPT_FILE_EXTENSION],
                letShellWindowsPopUpWhenStartScript: letShellWindowsPopUpWhenStartScript
                );

            var loggerForRemoteScriptRunner = loggerFactory.CreateLogger <RemoteScriptRunner>();
            var remoteScriptRunner          = new RemoteScriptRunner(loggerForRemoteScriptRunner);

            string localIpAddress = HostAddressProvider.IPv4Address;

            var loggerForWdClientServices = loggerFactory.CreateLogger <WDClientServices>();

            wdClientServices = new WDClientServices(
                logger: loggerForWdClientServices,
                localScriptRunner: localScriptRunner,
                localIpAddress: localIpAddress,
                remoteScriptRunner: remoteScriptRunner,
                scriptNameManageScreenResolutions: customConfigProvider[MagicStrings.SCRIPTNAME_MANAGE_SCREEN_RESOLUTION],
                scriptArgsManageScreenResolutions: customConfigProvider[MagicStrings.SCRIPTARGS_MANAGE_SCREEN_RESOLUTION],
                scriptNameStartStreamingSink: customConfigProvider[MagicStrings.SCRIPTNAME_START_STREAMING_SINK],
                scriptArgsStartStreamingSink: customConfigProvider[MagicStrings.SCRIPTARGS_START_STREAMING_SINK],
                scriptNameStartStreamingSource: customConfigProvider[MagicStrings.SCRIPTNAME_START_STREAMING_SOURCE],
                scriptArgsStartStreamingSource: customConfigProvider[MagicStrings.SCRIPTARGS_START_STREAMING_SOURCE],
                scriptNamePreventDisplayBlanking: customConfigProvider[MagicStrings.SCRIPTNAME_PREVENT_DISPLAY_BLANKING],
                scriptArgsPreventDisplayBlanking: customConfigProvider[MagicStrings.SCRIPTARGS_PREVENT_DISPLAY_BLANKING]
                );
        }
コード例 #4
0
ファイル: App.xaml.cs プロジェクト: lzukw/WirelessDisplay
//############ Original code from template - end ##############################

        /// <summary>
        /// Creates all objects that need to be injected into the constructor
        /// of MainViewModel (prepare Dependency-injection). These created
        /// object themselves need other things injected in their constructors.
        /// This funciton glues all the needed objects together using
        /// dependecy-injection.
        /// </summary>
        private void realizeDependencyInjection(
            out ILogger <MainWindowViewModel> loggerforMainWindowModel,
            out IServerController serverController,
            out string hostName,
            out string iPAddress,
            out List <UInt16> portNumbers)
        {
            // Create LoggerFactory for typed loggers.
            // See https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1#non-host-console-app
            var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder
                .AddFilter("Microsoft", LogLevel.Warning)
                .AddFilter("System", LogLevel.Warning)
                .AddFilter("Default", LogLevel.Information)
                .AddConsole((opts) => { opts.DisableColors = true; });
            });

            // Assign out-object logger
            loggerforMainWindowModel = loggerFactory.CreateLogger <MainWindowViewModel>();

            // Create reader for config.json
            var customConfigProviderLogger = loggerFactory.CreateLogger <CustomConfigProvider>();
            var customConfigProvider       = new CustomConfigProvider(customConfigProviderLogger,
                                                                      MagicStrings.CONFIG_FILE);

            // Read Port-Numbers from config.json
            List <UInt16> portNumberList = new List <UInt16>();

            string portsAsString = customConfigProvider[MagicStrings.PORT_NUMBERS];

            string[] ports = portsAsString.Split(',', StringSplitOptions.RemoveEmptyEntries);
            foreach (string port in ports)
            {
                UInt16 portNumber;
                bool   success = UInt16.TryParse(port, out portNumber);
                if (!success)
                {
                    throw new WDFatalException($"In config-file '{MagicStrings.CONFIG_FILE}' the port-numbers cannot be parsed: '{MagicStrings.PORT_NUMBERS} : {portsAsString}'");
                }
                portNumberList.Add(portNumber);
            }
            // Assign out-object portNumbers
            portNumbers = portNumberList;

            // Create instance implementing IServerController
            var    serverControllerLogger = loggerFactory.CreateLogger <ServerController>();
            string serverPath             =
                customConfigProvider[MagicStrings.PATH_TO_SCRIPTING_REST_API_SERVER];
            string argsTemplate =
                customConfigProvider[MagicStrings.ARGS_TEMPLATE_FOR_SCRIPTING_REST_API_SERVER];

            // Assign out-object serverController
            serverController = new ServerController(serverControllerLogger,
                                                    serverPath, argsTemplate);


            // Assign out-object hostName
            hostName = HostAddressProvider.HostName;

            // Assign out-object iPAddress
            iPAddress = HostAddressProvider.IPv4Address;
        }