Advertisement
Guest User

Untitled

a guest
Jul 5th, 2015
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. Parse.Cloud.define("getBestScores", function(request, response) {
  3.     var bestQuery = new Parse.Query("HighScore");
  4.     bestQuery.descending("score");
  5.     bestQuery.limit(30);
  6.    
  7.     bestQuery.find({
  8.         success: function(results) {
  9.             var result = {};
  10.             /*
  11.              * Tu pobierana jest lista lepszych wyników niż użytkownika, który przysyła zapytanie.
  12.              */
  13.             getPositionOfEmail(request.params.email, {
  14.                 success: function(before, score) {
  15.                     if (before != null) {
  16.                         /*
  17.                          * Tutaj zmienna before mówi ile jest wyników lepszych od użytkownika, który pyta o listę najlepszych wyników.
  18.                          * Zmienna Score mówi, jaki jest jego wynik, a results to wynik poprzedniego zapytania, w którym jest 30 najlepszych wyników.
  19.                          * Taki zapis służył optymalizacji i przesłania klientowi wszystkich informacji za jednym zamachem.
  20.                          * Wiem, trochę to na pałę, ale widocznie bardziej mi się nie chciało kombinować.
  21.                          */
  22.                         result[(before.length + 1) + ";" + score] = results;
  23.                         response.success(result);
  24.                     } else {
  25.                         /*
  26.                          * To znaczy, że nie ma jeszcze wyników w bazie
  27.                          */
  28.                         result["0;-1"] = results;
  29.                         response.success(result);
  30.                     }
  31.                 },
  32.                 error: function(object, error) {
  33.                     response.error(error);
  34.                 }
  35.             });
  36.         },
  37.         error: function(object, error) {
  38.             response.error(error);
  39.         }
  40.     });
  41. });
  42.  
  43. Parse.Cloud.define("saveHighscore", function(request, response) {
  44.     var email = request.params.email;
  45.     var score = request.params.score;
  46.    
  47.     var query = new Parse.Query("HighScore");
  48.     query.equalTo("userEmail", email);
  49.     query.find({
  50.         success: function(results) {
  51.             if (results != null) {
  52.                 var object = results[0];
  53.                 if (object != null) {
  54.                     if (object.get("score") <= score) {
  55.                         object.set("score", score);
  56.                         object.save(null, {
  57.                             success: function(result) {
  58.                                 getPositionOfScore(score, {
  59.                                     success: function(betterList) {
  60.                                         response.success(betterList.length + 1);
  61.                                     },
  62.                                     error: function(object, error) {
  63.                                         response.error(error);
  64.                                     }
  65.                                 });
  66.                             },
  67.                             error: function(result, error) {
  68.                                 response.error(error);
  69.                             }
  70.                         });
  71.                     } else {
  72.                         getPositionOfScore(object.get("score"), {
  73.                             success: function(betterList) {
  74.                                 response.success(betterList.length + 1);
  75.                             },
  76.                             error: function(object, error) {
  77.                                 response.error(error);
  78.                             }
  79.                         });
  80.                     }
  81.                 } else {
  82.                     createNewScore(email, score, response);
  83.                 }
  84.             } else {
  85.                 createNewScore(email, score, response);
  86.             }
  87.         },
  88.         error: function(object, error) {
  89.             createNewScore(email, score, response);
  90.         }
  91.     });
  92. });
  93.  
  94. function createNewScore(email, score, response) {
  95.     var HighScore = Parse.Object.extend("HighScore");
  96.     var highScore = new HighScore();
  97.     highScore.set("score", score);
  98.     highScore.set("userEmail", email);
  99.     highScore.save(null, {
  100.         success: function(highScore) {
  101.             getPositionOfScore(score, {
  102.                 success: function(results) {
  103.                     response.success(results.length + 1);
  104.                 },
  105.                 error: function(object, error) {
  106.                     response.error(error);
  107.                 }
  108.             });
  109.         },
  110.         error: function(object, error) {
  111.             response.error(error);
  112.         }
  113.     });
  114. }
  115.  
  116. function getPositionOfScore(score, options) {
  117.     var query = new Parse.Query("HighScore");
  118.     query.greaterThan("score", score);
  119.     query.find(options);
  120. }
  121.  
  122. function getPositionOfEmail(email, options) {
  123.     var query = new Parse.Query("HighScore");
  124.     query.equalTo("userEmail", email);
  125.     /*
  126.      * Pobieramy wynik dla maila (użykownika, który pyta o najlepsze wyniki)
  127.      */
  128.     query.find({
  129.         success: function (results) {
  130.             if (results != null) {
  131.                 var score = results[0].get("score");
  132.                 var scoreQuery = new Parse.Query("HighScore");
  133.                 scoreQuery.greaterThan("score", score);
  134.                 /*
  135.                  * Szukamy lepsze wyniki i przekazujemy je w odpowiedzi do metody wołąjącej
  136.                  */
  137.                 scoreQuery.find({
  138.                     success: function(better) {
  139.                         options.success(better, score);
  140.                     },
  141.                     error: function(object, error) {
  142.                         options.error(object, error);
  143.                     }
  144.                 });
  145.             } else {
  146.                 options.success(null, 0);
  147.             }
  148.         },
  149.         error: function(object, error) {
  150.             options.error(object, error);
  151.         }
  152.     });
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement