public static void DeserializeFruitonTeams() { Debug.Log("Trying to load Fruiton Teams."); if (File.Exists(FRUITON_TEAMS_PATH)) { using (FileStream file = File.Open(FRUITON_TEAMS_PATH, FileMode.Open)) { FruitonTeamList fruitonTeamList = FruitonTeamList.Parser.ParseFrom(file); GameManager.Instance.FruitonTeamList = fruitonTeamList; } Debug.Log("Fruiton Teams loaded."); } }
/// <summary> /// Compares locally stored list of teams is different from the one loaded from the server and merges them together. /// </summary> /// <param name="serverTeamList">list of teams loaded from the server</param> private void MergeTeamLists(FruitonTeamList serverTeamList) { RepeatedField <FruitonTeam> serverTeams = serverTeamList.FruitonTeams; RepeatedField <FruitonTeam> localTeams = FruitonTeamList.FruitonTeams; var serverTeamDb = new Dictionary <string, FruitonTeam>(serverTeams.Count); foreach (FruitonTeam serverTeam in serverTeams) { serverTeamDb.Add(serverTeam.Name, serverTeam); } var localTeamNames = new HashSet <string>(localTeams.Select(x => x.Name)); foreach (FruitonTeam localTeam in localTeams) { FruitonTeam serverTeam; bool areNamesSame = serverTeamDb.TryGetValue(localTeam.Name, out serverTeam); // Exactly the same team if (areNamesSame && AreTeamsEqual(localTeam, serverTeam)) { continue; } // Name clash, different teams if (areNamesSame) { localTeam.Name = GenerateNewTeamName(localTeam.Name, localTeamNames, serverTeamDb); } // Upload changes serverTeamDb.Add(localTeam.Name, localTeam); serverTeams.Add(localTeam); PlayerHelper.UploadFruitonTeam(localTeam, Debug.Log, Debug.Log); } FruitonTeamList = serverTeamList; Serializer.SerializeFruitonTeams(); }
/// <summary> /// Loads last saved player's data from local cache and server, sets up fruiton database. /// </summary> private void Initialize() { FruitonDatabase = new FruitonDatabase(KernelUtils.LoadTextResource(FRUITON_DB_FILE)); AllFruitons = ClientFruitonFactory.CreateAllKernelFruitons(); if (IsInTrial) { AvailableFruitons = AllPlayableFruitons.Select(fruiton => fruiton.dbId).ToList(); FruitonTeamList = new FruitonTeamList(); loggedPlayerInfo = new LoggedPlayerInfo(); } else { PlayerOptions = Serializer.LoadPlayerSettings(); Serializer.DeserializeFruitonTeams(); AvailableFruitons = Serializer.LoadAvailableFruitons(); } if (IsOnline) { PlayerHelper.GetAllFruitonTeams(MergeTeamLists, Debug.Log); PlayerHelper.GetAvailableFruitons((list) => Debug.Log("Available fruitons loaded from server."), Debug.Log); } }