IEnumerator TryHubLogin(HubLoginReq loginRequest)
        {
            var             requestData = JsonUtility.ToJson(loginRequest);
            UnityWebRequest r           = UnityWebRequest.Get(hubLogin + UnityWebRequest.EscapeURL(requestData));

            yield return(r.SendWebRequest());

            if (r.error != null)
            {
                Logger.Log("Hub Login request failed: " + r.error, Category.DatabaseAPI);
                yield break;
            }
            else
            {
                var response = JsonUtility.FromJson <ApiResponse>(r.downloadHandler.text);
                if (response.errorCode == 0)
                {
                    string s = r.GetResponseHeader("set-cookie");
                    hubCookie = s.Split(';') [0];
                    Logger.Log("Hub connected successfully", Category.DatabaseAPI);
                    r = UnityWebRequest.Get("http://ipinfo.io/ip");
                    yield return(r.SendWebRequest());

                    publicIP       = Regex.Replace(r.downloadHandler.text, @"\t|\n|\r", "");
                    connectedToHub = true;
                }
                else
                {
                    Logger.Log("Hub Login request failed: " + response.errorMsg, Category.DatabaseAPI);
                }
            }
        }
        //Attempts to auth with api.unitystation.org for server status updates
        void AttemptHubConnection()
        {
            if (string.IsNullOrEmpty(config.HubUser) || string.IsNullOrEmpty(config.HubPass))
            {
                Logger.Log("Invalid Hub creds found, aborting HUB connection", Category.DatabaseAPI);
                return;
            }

            var loginReq = new HubLoginReq
            {
                username = config.HubUser,
                password = config.HubPass
            };

            Instance.StartCoroutine(Instance.TryHubLogin(loginReq));
        }
예제 #3
0
        IEnumerator SendServerStatus()
        {
            if (string.IsNullOrEmpty(config.HubUser) || string.IsNullOrEmpty(config.HubPass))
            {
                Logger.Log("Invalid Hub creds found, aborting HUB connection", Category.DatabaseAPI);
                yield break;
            }

            var loginRequest = new HubLoginReq
            {
                username = config.HubUser,
                password = config.HubPass
            };

            var             requestData = JsonUtility.ToJson(loginRequest);
            UnityWebRequest req         = UnityWebRequest.Get(hubLogin + UnityWebRequest.EscapeURL(requestData));

            yield return(req.SendWebRequest());

            if (req.error == null)
            {
                var response = JsonUtility.FromJson <ApiResponse>(req.downloadHandler.text);
                if (response.errorCode == 0)
                {
                    string s = req.GetResponseHeader("set-cookie");
                    hubCookie = s.Split(';') [0];
                    req       = UnityWebRequest.Get("http://ipinfo.io/ip");
                    yield return(req.SendWebRequest());

                    publicIP = Regex.Replace(req.downloadHandler.text, @"\t|\n|\r", "");
                }
                else if (response.errorCode == 901)
                {
                    Logger.Log("Hub API returned unauthorized credentials, aborting HUB connection", Category.DatabaseAPI);
                    yield break;
                }
                else
                {
                    Logger.Log("Hub API returned error code " + response.errorCode + ", aborting HUB connection\n" + response.errorMsg, Category.DatabaseAPI);
                    yield break;
                }
            }
            else
            {
                Logger.Log("Hub API returned error, aborting HUB connection", Category.DatabaseAPI);
                yield break;
            }

            var status = new ServerStatus();

            status.ServerName   = config.ServerName;
            status.ForkName     = buildInfo.ForkName;
            status.BuildVersion = buildInfo.BuildNumber;

            if (SubSceneManager.Instance == null)
            {
                status.CurrentMap = "loading";
            }
            else
            {
                status.CurrentMap = SubSceneManager.ServerChosenMainStation;
            }

            status.GameMode   = GameManager.Instance.GetGameModeName();
            status.IngameTime = GameManager.Instance.roundTimer.text;
            if (PlayerList.Instance != null)
            {
                status.PlayerCount = PlayerList.Instance.ConnectionCount;
            }
            status.ServerIP      = publicIP;
            status.ServerPort    = GetPort();
            status.WinDownload   = config.WinDownload;
            status.OSXDownload   = config.OSXDownload;
            status.LinuxDownload = config.LinuxDownload;

            status.fps = (int)FPSMonitor.Instance.Current;

            UnityWebRequest r = UnityWebRequest.Get(hubUpdate + UnityWebRequest.EscapeURL(JsonUtility.ToJson(status)) + "&user="******"Cookie", hubCookie);
            yield return(r.SendWebRequest());

            if (r.error != null)
            {
                Logger.Log("Failed to update hub with server status" + r.error, Category.DatabaseAPI);
            }
        }