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.");
     }
 }
Exemple #2
0
    /// <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();
    }
Exemple #3
0
    /// <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);
        }
    }