Ejemplo n.º 1
0
    private static void WriteNewScore(int score, string nickname, string timestamp)
    {
        // 엔트리 하나 추가
        var key = ScoresReference.Push().Key;

        // 추가한 엔트리의 데이터를 수정할 것을 조립
        var entry        = new RankingInfo(score, nickname, timestamp);
        var entryValues  = entry.ToDictionary();
        var childUpdates = new Dictionary <string, object>();

        childUpdates["/Scores/" + key] = entryValues;

        // 실제 디비에 데이터 업데이트 요청
        ScoresReference.UpdateChildrenAsync(childUpdates);
    }
Ejemplo n.º 2
0
 private void AddScoreToLeaders(int score, string nickname, string timestamp)
 {
     ScoresReference.RunTransaction(mutableData =>
     {
         // 서버에 있는 점수 리스트
         var leaders = mutableData.Value as List <object>;
         // 점수 리스트가 없으면, 생성
         if (leaders == null)
         {
             leaders = new List <object>();
         }
         // 점수 리스트가 최대 개수를 넘었으면, 가장 작은 점수를 제거
         else if (mutableData.ChildrenCount >= rankingList.Count)
         {
             var minScore  = long.MaxValue;
             object minVal = null;
             foreach (var child in leaders)
             {
                 var childDic = child as Dictionary <string, object>;
                 if (childDic == null)
                 {
                     continue;
                 }
                 var rankingEntry = new RankingInfo(childDic);
                 if (rankingEntry == null)
                 {
                     continue;
                 }
                 if (rankingEntry.score < minScore)
                 {
                     minScore = rankingEntry.score;
                     minVal   = child;
                 }
             }
             // 새 점수가 순위에 들지못했으면, 실패했다고 처리
             if (minScore > score)
             {
                 return(TransactionResult.Abort());
             }
             leaders.Remove(minVal);
         }
         // 리스트에 새 점수를 추가
         var newEntry = new RankingInfo(score, nickname, timestamp);
         leaders.Add(newEntry.ToDictionary());
         // 내림차순으로 정렬
         leaders.Sort((a, b) =>
         {
             var rankingA = new RankingInfo(a as Dictionary <string, object>);
             var rankingB = new RankingInfo(b as Dictionary <string, object>);
             return(rankingB.score.CompareTo(rankingA.score));
         });
         mutableData.Value = leaders;
         // Ranking UI에 반영
         rankingInfoList.Clear();
         foreach (var v in leaders)
         {
             rankingInfoList.Add(new RankingInfo(v as Dictionary <string, object>));
         }
         // 성공했다고 처리
         return(TransactionResult.Success(mutableData));
     });
 }