public ConfigStatus ToLaunchGameRequest(
            LaunchParams parameters, out LaunchGameRequest request)
        {
            ConfigStatus status =
                _queryParametersParser.ParametersToDictionary(
                    parameters.QueryParams, out IDictionary <string, string> parametersDict);

            status = status.Merge(
                _queryParametersParser.ParseToParameters(parametersDict, parameters));
            ISdkConfig sdkConfig = _sdkConfigFactory.LoadGgpSdkConfigOrDefault();

            status = status.Merge(
                EnvironmentVariables(parameters, out IDictionary <string, string> envVariables));
            status = status.Merge(CommandLineArguments(parameters, out string[] cmdArgs));

            if ((parameters.Endpoint == StadiaEndpoint.PlayerEndpoint ||
                 parameters.Endpoint == StadiaEndpoint.AnyEndpoint) &&
                !string.IsNullOrEmpty(parameters.TestAccount))
            {
                status.AppendWarning(
                    ErrorStrings.TestAccountsNotSupported(parameters.TestAccountGamerName));
                parameters.TestAccount = null;
            }

            request = new LaunchGameRequest
            {
                Parent                   = Parent(sdkConfig, parameters),
                GameletName              = parameters.GameletName,
                ApplicationName          = parameters.ApplicationName,
                ExecutablePath           = ExecutablePath(parameters),
                CommandLineArguments     = cmdArgs,
                EnvironmentVariablePairs = envVariables,
                SurfaceEnforcementMode   = parameters.SurfaceEnforcementMode,
                Debug = parameters.Debug,
                EnableDeveloperResumeOffer = parameters.Endpoint == StadiaEndpoint.AnyEndpoint
            };

            status = status.Merge(
                _queryParametersParser.ParseToLaunchRequest(parametersDict, request));

            status = status.Merge(
                _queryParametersParser.GetFinalQueryString(parametersDict, out string queryString));
            parameters.QueryParams = queryString;

            if ((parameters.Endpoint == StadiaEndpoint.PlayerEndpoint ||
                 parameters.Endpoint == StadiaEndpoint.AnyEndpoint) &&
                !string.IsNullOrEmpty(queryString))
            {
                status.AppendWarning(ErrorStrings.QueryParamsNotSupported(queryString));
            }

            return(status);
        }
Exemplo n.º 2
0
        ConfigStatus ParseParamsCustomParameters(LaunchParams parameters,
                                                 IDictionary <string, string> queryParams)
        {
            ConfigStatus status = ParseParamsCmd(parameters, queryParams);

            return(status.Merge(ParseParamsVars(parameters, queryParams)));
        }
Exemplo n.º 3
0
        public ConfigStatus ParseToLaunchRequest(
            IDictionary <string, string> queryParams, LaunchGameRequest launchRequest)
        {
            ConfigStatus status = AssignValues(launchRequest, queryParams);

            return(status.Merge(ParseLaunchRequestCustomParameters(launchRequest, queryParams)));
        }
Exemplo n.º 4
0
        public ConfigStatus ParseToParameters(IDictionary <string, string> queryParams,
                                              LaunchParams parameters)
        {
            ConfigStatus status = AssignValues(parameters, queryParams);

            return(status.Merge(ParseParamsCustomParameters(parameters, queryParams)));
        }
Exemplo n.º 5
0
        /// <summary>
        /// Sets environment variables from query parameters.
        /// Environment variables are prioritized in the following way:
        /// <list type="number">
        /// <item>
        /// <description>
        /// Query parameter 'vars' value.
        /// </description>
        /// </item>
        /// <item>
        /// <description>
        /// 'Stadia Environment Variables' setting.
        /// </description>
        /// </item>
        /// <item>
        /// <description>
        /// Other VSI settings(Rgp, RenderDoc, ...).
        /// </description>
        /// </item>
        /// <item>
        /// <description>
        /// Other Query parameters(color_tools, enable_llpc_in_amdvlk, ...).
        /// </description>
        /// </item>
        /// </list>
        /// 3d and 4th points don't overlap, so they are actually together on the 3d place.
        /// </summary>
        /// <param name="launchRequest"></param>
        /// <param name="queryParams"></param>
        /// <returns></returns>
        ConfigStatus ParseLaunchRequestCustomParameters(LaunchGameRequest launchRequest,
                                                        IDictionary <string, string> queryParams)
        {
            ConfigStatus status = AddBoolEnvironmentVariable(
                launchRequest, queryParams, "ENABLE_VK_LAYER_VULKAN_COLOR_TOOLS",
                QueryParamMapping.ColorTools);

            status = status.Merge(
                ParseLaunchRequestVulkanDriverVariant(launchRequest, queryParams));
            status = status.Merge(AddBoolEnvironmentVariable(
                                      launchRequest, queryParams, "GGP_VK_AMDVLK_USE_LLPC",
                                      QueryParamMapping.EnableLlpcInAmdvlk));
            status = status.Merge(AddBoolEnvironmentVariable(
                                      launchRequest, queryParams,
                                      "ENABLE_GOOGLE_PIPELINE_DATA_EXPORT_LAYER",
                                      QueryParamMapping.EnablePipelineCacheSourceLayer));
            return(status);
        }
        ConfigStatus EnvironmentVariables(LaunchParams parameters,
                                          out IDictionary <string, string> envVariables)
        {
            ConfigStatus status          = ConfigStatus.OkStatus();
            string       variablesString = parameters.GameletEnvironmentVars ?? string.Empty;

            envVariables = variablesString.Split(';')
                           .Select(v => v.Trim())
                           .Where(v => !string.IsNullOrWhiteSpace(v)).Select(v =>
            {
                List <string> parts = v.Split('=').ToList();

                if (string.IsNullOrWhiteSpace(parts[0]))
                {
                    status.AppendWarning(ErrorStrings.InvalidEnvironmentVariable(v));
                    return(Tuple.Create(string.Empty, string.Empty));
                }

                return(Tuple.Create(parts[0], string.Join("=", parts.Skip(1))));
            }).Where(t => !string.IsNullOrEmpty(t.Item1)).GroupBy(tuple => tuple.Item1).Select(
                tuple =>
            {
                if (tuple.Count() > 1)
                {
                    status.AppendWarning(
                        ErrorStrings.MultipleEnvironmentVariableKeys(tuple.Key));
                }

                return(tuple);
            }).ToDictionary(t => t.Key, t => t.Last().Item2);
            status = status.Merge(AddFlagsEnvironmentVariables(parameters, envVariables));
            if (!status.IsOk)
            {
                status.AppendWarning(ErrorStrings.EditEnvironmentVariables);
            }

            return(status);
        }