void SaveLog() { if (stringBuilder.Length == 0) { return; } GSRequestData logData = new GSRequestData(); logData.AddString("key", "InAppPurchase"); logData.AddString("message", "User purchase in-app"); GSData _d = new GSData(new Dictionary <string, object>() { { "purchase", stringBuilder }, }); logData.AddObject("data", _d); GameSparksManager.Instance.Log(logData); string purchaseLog = PreferencesFactory.GetString("PurchaseLog", ""); purchaseLog = string.Format("{0}\n-----------\n{1}", purchaseLog, stringBuilder); PreferencesFactory.SetString("PurchaseLog", purchaseLog); stringBuilder.Length = 0; }
//Starts the game session public void StartNewRTSession(RTSessionInfo _info) { //if the settings arent null if (gameSparksRTUnity == null) { Debug.Log("GSM| Creating New RT Session Instance..."); sessionInfo = _info; //player/session information gameSparksRTUnity = this.gameObject.AddComponent <GameSparksRTUnity>(); //add the RT script to the manager GSRequestData mockedResponse = new GSRequestData(); //create a new request mockedResponse.AddNumber("port", (double)_info.GetPortID()); //gets the port id mockedResponse.AddString("host", _info.GetHostURL()); //gets host server mockedResponse.AddString("accessToken", _info.GetAccessToken()); // construct a dataset from the game-details FindMatchResponse response = new FindMatchResponse(mockedResponse); //create a mock response for match //configures the game gameSparksRTUnity.Configure(response, (peerId) => { OnPlayerConnectedToGame(peerId); }, (peerId) => { OnPlayerDisconnected(peerId); }, (ready) => { OnRTReady(ready); }, (packet) => { OnPacketReceived(packet); }); gameSparksRTUnity.Connect(); // when the config is set, connect the game } else { Debug.LogError("Session Already Started"); } }
/// <summary> Create a new match making request, hosting a match based upon the dropdown menu option </summary> private void HostRoom() { m_hosting = true; QuickConnect.m_StaticQuickStart = true; //Not technically true, but prevents QuickConnect from firing upon scene load //Gather data for hosting the match string matchShortCode = m_MatchShortCodes[m_HostSelectionDropDown.GetComponent <Dropdown>().value]; m_cleanRoomName = m_RoomNameInputField.GetComponentsInChildren <Text>()[1].text; GSRequestData matchData = new GSRequestData(); matchData.AddString("m_cleanRoomName", m_cleanRoomName); //Get max player count new LogEventRequest() .SetEventKey("GetFoundMatchInfo") .SetEventAttribute("MatchShortCode", matchShortCode) .Send((_nameResponse) => { //Since these calls are asynchronous, call host from inside here var matchInfo = JsonUtility.FromJson <JSONFoundMatchInfoConverter>(_nameResponse.ScriptData.JSON); string maxPlayerCount = matchInfo.m_MaxPlayerCount.ToString(); matchData.AddString("maxPlayerCount", maxPlayerCount); //Start hosting the match new MatchmakingRequest() .SetMatchShortCode(matchShortCode) .SetSkill(0) .SetMatchData(matchData) .Send((_matchMakingResponse) => { if (_matchMakingResponse.HasErrors) { Debug.LogError("GSM| Matchmaking Error\n" + _matchMakingResponse.Errors.JSON); m_HostErrorText.SetActive(true); m_HostErrorText.GetComponent <Text>().text = "Error attempting to host match: \"" + _matchMakingResponse.Errors.JSON + "\""; DisplayPanel(PanelSelection.HostMenu); } else //Host was successful - update lobby screen { //Add player count and match name to lobby screen m_PlayerCountText.GetComponent <Text>().text = "1/" + matchInfo.m_MaxPlayerCount.ToString(); m_MatchNameText.GetComponent <Text>().text = matchShortCode + ": " + m_cleanRoomName; //Add player name to the player list in the lobby screen m_PlayerListText.GetComponent <Text>().text = m_UsernameInput.GetComponentsInChildren <Text>()[1].text; //Display the users in the room m_ChosenMatch.shortCode = matchShortCode; //Update matchShortCode in case "host" disconnects GameSparksManager.Instance().SetMatchShortCode(m_ChosenMatch.shortCode); } }); }); }
private void ResetPasswordCanvasContinueBtn() { if (Register.isSoundPlaying) { audioSource.Play(); } string token = resetPasswordCanvas_token.text; string newPassword = resetPasswordCanvas_newPassword.text; if (token == "") { ShowToast.MyShowToastMethod("Please Enter Token!"); return; } if (newPassword == "") { ShowToast.MyShowToastMethod("Please Enter New Password!"); return; } GSRequestData gSRequestData = new GSRequestData(); gSRequestData.AddString("action", "resetPassword"); gSRequestData.AddString("token", token); gSRequestData.AddString("password", newPassword); new GameSparks.Api.Requests.AuthenticationRequest().SetUserName("").SetPassword("").SetScriptData(gSRequestData).Send((response) => { Register.userId = response.UserId; if (response.Errors.GetString("action") == "complete") { ShowToast.MyShowToastMethod("Password Changed Successfully"); Debug.Log("Password Changed Successfully"); forgetPassword_canvas.enabled = false; resetPassword_canvas.enabled = false; createOne_btn.enabled = true; login_btn.interactable = true; playAsGuest_btn.interactable = true; } else { ShowToast.MyShowToastMethod("Error Resetting Password!"); Debug.Log(response.Errors.GetString("action")); forgetPassword_canvas.enabled = false; login_btn.interactable = true; createOne_btn.interactable = true; playAsGuest_btn.interactable = true; } }); }
private void ForgetPasswordContinueBtn() { if (Register.isSoundPlaying) { audioSource.Play(); } string userName = forgetPasswordUserName.text; string email = forgetPasswordEmail.text; if (userName == "") { ShowToast.MyShowToastMethod("Please Enter User Name!"); return; } if (email == "") { ShowToast.MyShowToastMethod("Please Enter Email Address!"); return; } GSRequestData gSRequestData = new GSRequestData(); gSRequestData.AddString("action", "passwordRecoveryRequest"); gSRequestData.AddString("email", email); new GameSparks.Api.Requests.AuthenticationRequest().SetUserName(userName).SetPassword("").SetScriptData(gSRequestData).Send((response) => { Register.userId = response.UserId; if (response.Errors.GetString("action") == "complete") { ShowToast.MyShowToastMethod("Request Sent! Check You Email"); Debug.Log("Request Sent! Check You Email"); forgetPassword.enabled = false; resetPassword_canvas.enabled = true; } else { ShowToast.MyShowToastMethod("Error Sending Requset!"); Debug.Log("Error Sending Requset! " + response.Errors.GetString("action")); } }); }
public void SendFoundWord(string word, float time, Action <LogChallengeEventResponse> response) { if (_currentChallengeId == null) { _currentChallengeId = GameSparksManager.Instance.GetCurrentChallengeId(); } GSRequestData data = new GSRequestData(); data.AddString("word", word); data.AddNumber("time", time); new LogChallengeEventRequest() .SetChallengeInstanceId(_currentChallengeId) .SetEventKey("WordFound") .SetEventAttribute("data", data) .Send(response); }
/// <summary> /// Connects a user to a game using GameSparks auto-matchmaking ability based upon the room name that the programmer specified in the Unity Editor /// for the <see cref="QuickConnect"/> script if they are using <see cref="QuickConnect"/>. Otherwise is moves onto the next step of manually connecting players /// </summary> private void Connect() { if (m_QuickConnect && !m_SwitchedToManualMatchMaking) { GSRequestData matchData = new GSRequestData(); m_cleanRoomName = Regex.Replace(m_RoomName, @"\s+", ""); matchData.AddString("m_cleanRoomName", m_cleanRoomName); new MatchmakingRequest() .SetMatchShortCode("QS") //Quick Start short code .SetSkill(1) .SetMatchData(matchData) .SetMatchGroup(m_cleanRoomName) .Send((_matchMakingResponse) => { if (_matchMakingResponse.HasErrors) { Debug.LogError("GSM| Matchmaking Error\n" + _matchMakingResponse.Errors.JSON); m_HostErrorText.SetActive(true); m_HostErrorText.GetComponent <Text>().text = "Error attempting to host match: \"" + _matchMakingResponse.Errors.JSON + "\""; DisplayPanel(PanelSelection.HostMenu); } else //Host was successful - update lobby screen { DisplayPanel(PanelSelection.LobbyScreen); //Add player count and match name to lobby screen m_PlayerCountText.GetComponent <Text>().text = "1/20"; m_MatchNameText.GetComponent <Text>().text = "QS" + ": " + m_RoomName; //Add player name to the player list in the lobby screen m_PlayerListText.GetComponent <Text>().text = m_UsernameInput.GetComponentsInChildren <Text>()[1].text; //Display the users in the room m_ChosenMatch.shortCode = "QS"; //Update matchShortCode in case "host" disconnects GameSparksManager.Instance().SetMatchShortCode(m_ChosenMatch.shortCode); } }); } else { //Switch to the connection menu DisplayPanel(PanelSelection.ConnectionMenu); GetMatchShortCodes(); } }
public void Log(GSRequestData json) { if (!GameSparksManager.IsTokenAvailable()) { GameSparksManager.Instance.AnonymousLogin(); } json.AddString("userId", UserID()); json.AddDate("user_date", UnbiasedTime.Instance.Now()); json.AddDate("utc_date", UnbiasedTime.Instance.UTCNow()); new LogEventRequest() .SetEventKey("AppLog") .SetEventAttribute("data", json) .Send(((response) => { if (!response.HasErrors) { } })); }
public void UploadAvatar(Texture2D image, Action <Texture2D> action = null) { GSRequestData data = new GSRequestData(); data.AddString("type", "avatar"); Loading.Instance.Show(); new GetUploadUrlRequest() .SetUploadData(data) .Send((response) => { Loading.Instance.Hide(); if (response.HasErrors) { return; } string url = response.Url; Loading.Instance.Show(); StartCoroutine(AvatarUploading(url, image, action)); }); }
public void RegisterPlayerWithLeague() { GSRequestData segdata = new GSRequestData(); segdata.AddString("league", "placement"); //Dictionary<string, int> dict = new Dictionary<string, int>(); new RegistrationRequest() .SetDisplayName(displayNameRegister.text) .SetPassword(passwordRegister.text) .SetUserName(userNameRegister.text) .SetSegments(segdata) //.SetSegments(new GameSparks.Core.GSRequestData(new Dictionary<string,object>() {{"league","placement"}})) .Send((response) => { if (!response.HasErrors) { Debug.Log("Player Registered"); } else { Debug.Log("Error Registering Player"); } } ); }
public void SendPoints(int points, string source = null, JSONObject pointsJsonData = null) { int offlinePoints = PreferencesFactory.GetInt(Constants.KeyOfflinePoints, 0); string _pointsDataString = PreferencesFactory.GetString(Constants.KeyOfflinePointsData, null); if (pointsJsonData != null && source != null) { pointsJsonData.Add("source", source); } JSONArray _pointsData = new JSONArray(); if (!string.IsNullOrEmpty(_pointsDataString)) { try { _pointsData = JSONArray.Parse(_pointsDataString); } catch (Exception e) {} } if (pointsJsonData != null) // add new record { _pointsData.Add(pointsJsonData); } if (Reachability.Instance.IsReachable() == false || IsUserLoggedIn() == false) { PreferencesFactory.SetInt(Constants.KeyOfflinePoints, points + offlinePoints); PreferencesFactory.SetString(Constants.KeyOfflinePointsData, _pointsData.ToString()); return; } if (points + offlinePoints <= 0) { return; } int levelNumber = -1; try { Level level = LevelController.FirstUnplayedLevel(); if (level != null) { levelNumber = level.Number - 1; } } catch (Exception e) {} GSRequestData requestData = new GSRequestData(); requestData.AddNumber("offlinePoints", offlinePoints); requestData.AddNumber("score", points); requestData.AddNumber("lastPlayedLevel", levelNumber); if (_pointsData != null) { requestData.AddJSONStringAsObject("pointsData", _pointsData.ToString()); } if (source != null) { requestData.AddString("source", source); } new LogEventRequest() .SetEventKey("SubmitScoreV2") .SetEventAttribute("score", points + offlinePoints) .SetEventAttribute("data", requestData) .Send((response) => { if (!response.HasErrors) { PreferencesFactory.DeleteKey(Constants.KeyOfflinePoints); PreferencesFactory.DeleteKey(Constants.KeyOfflinePointsData); } }); }
public void SyncRestore() { if (!IsUserLoggedIn()) { return; } new LogEventRequest() .SetEventKey("LoadPlayerProgress") .Send((response) => { if (!response.HasErrors && response.ScriptData != null) { GSData data = response.ScriptData.GetGSData("data"); if (data == null) { return; } DateTime now = UnbiasedTime.Instance.Now(); string json = data.JSON; // date from remote json DateTime syncDate = now; if (data.ContainsKey("LastProgressSyncDate")) { syncDate = DateTime.Parse(data.GetString("LastProgressSyncDate")); } // date in device when was last sync DateTime lastUpdateDate = DateTime.Parse(PlayerPrefs.GetString("LastProgressSyncDate", now.ToString(CultureInfo.InvariantCulture))); MyDebug.Log("Should update prefs; lastUpdateDate: " + lastUpdateDate + "; syncDate: " + syncDate); if (syncDate.CompareTo(lastUpdateDate) != 0) { MyDebug.Log("Diff hash, update prefs"); JSONPrefs.Replace(json); // updating device date to sync date, because on next start shouldn't update again PlayerPrefs.SetString("LastProgressSyncDate", syncDate.ToString(CultureInfo.InvariantCulture)); PlayerPrefs.Save(); CustomGameManager manager = CustomGameManager.Instance as CustomGameManager; manager.ResetGame(); // reload data from sync LevelController.Instance.Reload(); // GSRequestData logData = new GSRequestData(); logData.AddString("key", "ProgressSync"); logData.AddString("message", "User synched progress from server"); GSData _d = new GSData(new Dictionary <string, object>() { { "Date in JSON", syncDate }, { "Date in device", lastUpdateDate } }); logData.AddObject("data", _d); Log(logData); } GetAwards(); // safe place to get awards } }); }
/** Converts a serializable object into GameSparks compatible GSData. */ public static GSRequestData ObjectToGSData(object obj) { GSRequestData gsData = new GSRequestData(); gsData.AddString("type", obj.GetType().ToString()); foreach (var field in obj.GetType().GetFields()) { if (!field.IsNotSerialized && field.GetValue(obj) != null) { if (field.FieldType == typeof(string)) { gsData.AddString(field.Name, field.GetValue(obj).ToString()); } else if (field.FieldType == typeof(bool)) { gsData.AddBoolean(field.Name, bool.Parse(field.GetValue(obj).ToString())); } else if (field.FieldType == typeof(int)) { gsData.AddNumber(field.Name, (int)Convert.ToInt32(field.GetValue(obj))); } else if (field.FieldType == typeof(float) || field.GetValue(obj).GetType() == typeof(double)) { gsData.AddNumber(field.Name, Double.Parse(field.GetValue(obj).ToString())); } else if (field.FieldType == typeof(List <string>) || field.GetValue(obj).GetType() == typeof(string[])) { gsData.AddStringList(field.Name, (field.FieldType == typeof(List <string>)) ? field.GetValue(obj) as List <string> : new List <string>(field.GetValue(obj) as string[])); } else if (field.FieldType == typeof(List <int>) || field.GetValue(obj).GetType() == typeof(int[])) { gsData.AddNumberList(field.Name, (field.FieldType == typeof(List <int>)) ? field.GetValue(obj) as List <int> : new List <int>(field.GetValue(obj) as int[])); } else if (field.FieldType == typeof(List <float>) || field.GetValue(obj).GetType() == typeof(float[])) { gsData.AddNumberList(field.Name, (field.FieldType == typeof(List <float>)) ? field.GetValue(obj) as List <float> : new List <float>(field.GetValue(obj) as float[])); } else if (field.FieldType == typeof(DateTime)) { gsData.AddDate(field.Name, (DateTime)field.GetValue(obj)); } else if (field.FieldType.IsClass && !field.FieldType.IsGenericType) { gsData.AddObject(field.Name, ObjectToGSData(field.GetValue(obj))); } else if (field.FieldType.IsGenericType && field.FieldType.GetGenericTypeDefinition() == typeof(List <>) || field.FieldType.IsArray) { List <GSData> gsDataList = new List <GSData>(); foreach (var elem in field.GetValue(obj) as IList) { gsDataList.Add(ObjectToGSData(elem)); } gsData.AddObjectList(field.Name, gsDataList); } } } Debug.LogWarning(gsData.JSON); return(gsData); }
public void RefreshChallengesList() { if (_refreshCoroutine != null) { StopCoroutine(_refreshCoroutine); } _challenges.Clear(); var requestData = new GSRequestData(); requestData.AddString("Language", LanguageUtils.RealLanguage(LocaliseText.Language)); var eligibilityCriteria = new GSRequestData(); GSData _d = new GSData(new Dictionary <string, object>() { { "Language", LanguageUtils.RealLanguage(LocaliseText.Language) } }); eligibilityCriteria.AddObject("segments", _d); new FindChallengeRequest() .SetAccessType("PUBLIC") .SetShortCode(new List <string> { Constants.ChallengeShortCode }) .SetScriptData(requestData) .SetEligibility(eligibilityCriteria) .Send((secondResponse) => { var publicChallenges = secondResponse.ChallengeInstances; if (publicChallenges == null || !publicChallenges.Any()) { var challengesData = secondResponse.ScriptData; if (challengesData == null) { return; } var dataList = secondResponse.ScriptData.GetGSDataList("challenges"); if (dataList != null) { if (dataList.Count > 0) { var enumerator = dataList.GetEnumerator(); while (enumerator.MoveNext()) { var current = enumerator.Current; if (current != null) { string username = null; string userId = null; var challengeId = current.GetString("challengeId"); var scriptData = current.GetGSData("scriptData"); if (scriptData != null) { } var challenger = current.GetGSData("challenger"); if (challenger != null) { username = challenger.GetString("name"); userId = challenger.GetString("id"); if (userId == PreferencesFactory.GetString(Constants.ProfileUserId)) { continue; } } var ch = new Challenge { ChallengeId = challengeId, UserName = username, UserId = userId, AvatarUploadId = "", ExternalIds = null }; _challenges.Add(ch); } } enumerator.Dispose(); } } } List <string> _ignoreChallangeIds = new List <string>(); var ignoreList = secondResponse.ScriptData.GetGSDataList("ignoreChallanges"); if (ignoreList != null) { var challengesIgnoreEnum = ignoreList.GetEnumerator(); while (challengesIgnoreEnum.MoveNext()) { var challenge = challengesIgnoreEnum.Current; _ignoreChallangeIds.Add(challenge.GetString("challengeId")); } } if (publicChallenges != null) { var challengesEnum = publicChallenges.GetEnumerator(); while (challengesEnum.MoveNext()) { var challenge = challengesEnum.Current; if (_ignoreChallangeIds.Contains(challenge.ChallengeId)) { continue; } var scriptData = challenge.ScriptData; var showInList = true; if (scriptData != null) { var k = scriptData.GetBoolean("showInList"); if (k != null) { showInList = (bool)k; } } if (showInList) { var username = challenge.Challenger.Name; var userId = challenge.Challenger.Id; if (userId == PreferencesFactory.GetString(Constants.ProfileUserId)) { continue; } var ch = new Challenge { ChallengeId = challenge.ChallengeId, UserName = username, UserId = userId, AvatarUploadId = challenge.ScriptData.GetString("avatarUploadId"), ExternalIds = challenge.Challenger.ExternalIds }; _challenges.Add(ch); } } challengesEnum.Dispose(); if (_onChallengeDetected != null) { _onChallengeDetected.OnChallengesListeFetched(_challenges); } } if (ShouldGetChallengesList) { _refreshCoroutine = CoRoutines.DelayedCallback(_challengeRefreshRate, RefreshChallengesList); StartCoroutine(_refreshCoroutine); } }); }