예제 #1
0
        private static IDictionary <string, string> CreateConfigMap(GSDKConfiguration localConfig)
        {
            var finalConfig = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            foreach (KeyValuePair <string, string> certEntry in localConfig.GameCertificates)
            {
                finalConfig[certEntry.Key] = certEntry.Value;
            }

            foreach (KeyValuePair <string, string> metadata in localConfig.BuildMetadata)
            {
                finalConfig[metadata.Key] = metadata.Value;
            }

            foreach (KeyValuePair <string, string> port in localConfig.GamePorts)
            {
                finalConfig[port.Key] = port.Value;
            }

            finalConfig[HeartbeatEndpointKey] = localConfig.HeartbeatEndpoint;
            finalConfig[ServerIdKey]          = localConfig.SessionHostId;
            finalConfig[VmIdKey]                     = localConfig.VmId;
            finalConfig[LogFolderKey]                = localConfig.LogFolder;
            finalConfig[SharedContentFolderKey]      = localConfig.SharedContentFolder;
            finalConfig[CertificateFolderKey]        = localConfig.CertificateFolder;
            finalConfig[TitleIdKey]                  = localConfig.TitleId;
            finalConfig[BuildIdKey]                  = localConfig.BuildId;
            finalConfig[RegionKey]                   = localConfig.Region;
            finalConfig[PublicIpV4AddressKey]        = localConfig.PublicIpV4Address;
            finalConfig[FullyQualifiedDomainNameKey] = localConfig.FullyQualifiedDomainName;

            return(finalConfig);
        }
예제 #2
0
        public void ReadConfiguration_EmptyGameGamePorts_Parsed()
        {
            var testConfig = new
            {
                heartbeatEndpoint = "heartbeatendpoint",
                sessionHostId     = "serverid",
                gamePorts         = new
                {
                }
            };

            GSDKConfiguration c = JsonConvert.DeserializeObject <GSDKConfiguration>(JsonConvert.SerializeObject(testConfig));

            c.GamePorts.Should().NotBeNull();
            c.GamePorts.Should().HaveCount(0);
        }
예제 #3
0
        public void ReadConfiguration_MultipleGameCertificates_Parsed()
        {
            var testConfig = new
            {
                heartbeatEndpoint = "heartbeatendpoint",
                sessionHostId     = "serverid",
                gameCertificates  = new Dictionary <string, string>
                {
                    { "gameCert", "onetwothree" },
                    { "gameCert2", "threefourfive" }
                }
            };
            GSDKConfiguration c = JsonConvert.DeserializeObject <GSDKConfiguration>(JsonConvert.SerializeObject(testConfig));

            c.GameCertificates.Should().NotBeNull();
            c.GameCertificates.Should().HaveCount(2);
        }
예제 #4
0
        public void ReadConfiguration_MultipleGamePorts_Parsed()
        {
            var testConfig = new
            {
                heartbeatEndpoint = "heartbeatendpoint",
                sessionHostId     = "serverid",
                gamePorts         = new Dictionary <string, string>
                {
                    { "8080", "debug" },
                    { "8081", "debug" }
                }
            };

            GSDKConfiguration c = JsonConvert.DeserializeObject <GSDKConfiguration>(JsonConvert.SerializeObject(testConfig));

            c.GamePorts.Should().NotBeNull();
            c.GamePorts.Should().HaveCount(2);
        }
예제 #5
0
        public static void Start()
        {
            string fileName = Environment.GetEnvironmentVariable(GsdkConfigFileEnvVarKey);

            if (!string.IsNullOrEmpty(fileName) && File.Exists(fileName))
            {
                _gsdkconfig = _jsonInstance.DeserializeObject <GSDKConfiguration>(File.ReadAllText(fileName));
            }
            else
            {
                Debug.LogError(string.Format("Environment variable {0} not defined", GsdkConfigFileEnvVarKey));
                Application.Quit();
            }

            _baseUrl = string.Format("http://{0}/v1/sessionHosts/{1}/heartbeats", _gsdkconfig.HeartbeatEndpoint, _gsdkconfig.SessionHostId);
            CurrentState.CurrentGameState  = GameState.Initializing;
            CurrentErrorState              = ErrorStates.Ok;
            CurrentState.CurrentPlayers    = new List <ConnectedPlayer>();
            CurrentState.CurrentGameHealth = "Healthy"; // initial state is healthy
            if (_configMap == null)
            {
                _configMap = CreateConfigMap(_gsdkconfig);
            }
            if (IsDebugging)
            {
                Debug.Log(_baseUrl);
                Debug.Log(_gsdkconfig.SessionHostId);
                Debug.Log(_gsdkconfig.LogFolder);
            }

            //Create an agent that can talk on the main-thread and pull on an interval.
            //This is a unity thing, need an object in the scene.

            if (_agentView == null)
            {
                _agentView = new GameObject("PlayFabAgentView");
                _agentView.AddComponent <PlayFabMultiplayerAgentView>();
                UnityEngine.Object.DontDestroyOnLoad(_agentView);
            }
        }