using System; using System.Collections; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.Networking; public class NetworkManager : Singleton { protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode) { } public IEnumerator Signup(SignupData signupData, Action success, Action failure) { string jsonString = JsonUtility.ToJson(signupData); Debug.Log("jsonString" + jsonString); byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonString); using (UnityWebRequest www = new UnityWebRequest(Constants.ServerURL + "/users/signup", UnityWebRequest.kHttpVerbPOST)) { www.uploadHandler = new UploadHandlerRaw(bodyRaw); www.downloadHandler = new DownloadHandlerBuffer(); www.SetRequestHeader("Content-Type", "application/json"); yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError) { Debug.Log("Error: " + www.error); if (www.responseCode == 409) { // TODO: 중복 사용자 생성 팝업 표시 Debug.Log("중복사용자"); failure?.Invoke(); // GameManager.Instance.OpenConfirmPanel("이미 존재하는 사용자입니다.", () => // { // failure?.Invoke(); // }); } } else { var result = www.downloadHandler.text; Debug.Log("Result: " + result); success?.Invoke(); // TODO: 회원가입 성공 팝업 표시 // GameManager.Instance.OpenConfirmPanel("회원 가입이 완료 되었습니다.", () => // { // success?.Invoke(); // }); } } } public IEnumerator Signin(SigninData signinData, Action success, Action failure) { string jsonString = JsonUtility.ToJson(signinData); byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonString); using (UnityWebRequest www = new UnityWebRequest(Constants.ServerURL + "/users/signin", UnityWebRequest.kHttpVerbPOST)) { www.uploadHandler = new UploadHandlerRaw(bodyRaw); www.downloadHandler = new DownloadHandlerBuffer(); www.SetRequestHeader("Content-Type", "application/json"); yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError) { } else { var cookie = www.GetResponseHeader("set-cookie"); if (!string.IsNullOrEmpty(cookie)) { int lastIndex = cookie.LastIndexOf(";"); string sid = cookie.Substring(0, lastIndex); PlayerPrefs.SetString("sid", sid); } var resultString = www.downloadHandler.text; var result = JsonUtility.FromJson(resultString); if (result.result == 0) { Debug.Log("유저네임이 유효하지 않습니다."); failure?.Invoke(0); // TODO: 유저네임 유효하지 않음 팝업 표시 // GameManager.Instance.OpenConfirmPanel("유저네임이 유효하지 않습니다.", () => // { // failure?.Invoke(0); // }); } else if (result.result == 1) { Debug.Log("패스워드가 유효하지 않습니다."); failure?.Invoke(1); // TODO: 패스워드가 유효하지 않음 팝업 표시 // GameManager.Instance.OpenConfirmPanel("패스워드가 유효하지 않습니다.", () => // { // failure?.Invoke(1); // }); } else if (result.result == 2) { Debug.Log("로그인에 성공하였습니다."); success?.Invoke(); // TODO: 성공 팝업 표시 // GameManager.Instance.OpenConfirmPanel("로그인에 성공하였습니다.", () => // { // success?.Invoke(); // }); } } } } public IEnumerator GetScore(Action success, Action failure) { using (UnityWebRequest www = new UnityWebRequest(Constants.ServerURL + "/users/score", UnityWebRequest.kHttpVerbGET)) { www.downloadHandler = new DownloadHandlerBuffer(); string sid = PlayerPrefs.GetString("sid", ""); if (!string.IsNullOrEmpty(sid)) { www.SetRequestHeader("Cookie", sid); } yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError) { if (www.responseCode == 403) { Debug.Log("로그인이 필요합니다."); } failure?.Invoke(); } else { var result = www.downloadHandler.text; var userScore = JsonUtility.FromJson(result); Debug.Log(userScore.score); success?.Invoke(userScore); } } } public IEnumerator GetLeaderboard(Action success, Action failure) { using (UnityWebRequest www = new UnityWebRequest(Constants.ServerURL + "/leaderboard", UnityWebRequest.kHttpVerbGET)) { www.downloadHandler = new DownloadHandlerBuffer(); string sid = PlayerPrefs.GetString("sid", ""); if (!string.IsNullOrEmpty(sid)) { www.SetRequestHeader("Cookie", sid); } yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError) { if (www.responseCode == 403) { Debug.Log("로그인이 필요합니다."); } failure?.Invoke(); } else { var result = www.downloadHandler.text; var scores = JsonUtility.FromJson(result); success?.Invoke(scores); } } } }