/// <summary> /// Try to sync to online database /// </summary> /// <param name="localScore">the local score</param> /// <param name="onlineNewest">if is the online newest</param> /// <returns>Return command string of update to local</returns> internal string SyncScore(GameScore localScore, out bool onlineNewest) { onlineNewest = false; string localQuery = string.Empty; if (localScore != null && localScore.UserID != LoginedAccount.UserID) { return(string.Empty); } //List<GameScore> scores = new List<GameScore>(); GameScore onlineScore = null; var userid = LoginedAccount.UserID; using (SqlConnection conn = GetConnection()) { SqlCommand cmd = new SqlCommand($"select * from epx_scores where userid = '{userid}';", conn); conn.Open(); var reader = cmd.ExecuteReader(); while (reader.Read()) { onlineScore = new GameScore() { UserID = userid, NickName = Convert.ToString("nickname"), Score = Convert.ToInt32(reader["score"]), Win = Convert.ToInt32(reader["win"]), Fail = Convert.ToInt32(reader["fail"]), Drawn = Convert.ToInt32(reader["drawn"]), ModifyTime = Convert.ToDateTime(reader["modifytime"]) }; } //verify modify time //If online newest, update to local //If local newest, update to online if (localScore != null) { //If local score is not null, check the local score id if (localScore.ModifyTime > onlineScore.ModifyTime) { var insert = ExecuteNonQuery(onlineScore.GetUpdate(localScore, "epx_scores", $"where userid={userid}")); Debug.WriteLine($"Update result is {insert}"); } else if (localScore.ModifyTime < onlineScore.ModifyTime) { onlineNewest = true; localQuery = localScore.GetUpdate(onlineScore, "scores"); } } else { if (onlineScore != null) { localQuery = onlineScore.GetInsert("scores"); } } } LoginedAccount.Score = onlineNewest ? onlineScore : localScore; return(localQuery); }
public string UpdateScore(int scoreid, int addScore, GameResult result) { if (result == GameResult.Ended) { return(string.Empty); } GameScore newscore = null; GameScore oldscore = null; newscore = GetScoreOfUser(scoreid); bool isNewRecord = false; if (newscore == null) { newscore = new GameScore(); newscore.ScoreID = scoreid; isNewRecord = true; } else { oldscore = (GameScore)newscore.Clone(); } newscore.ModifyTime = DateTime.Now; //Modify data newscore.Score += addScore; switch (result) { case GameResult.Drawn: ++newscore.Drawn; break; case GameResult.Win: ++newscore.Win; break; case GameResult.Fail: ++newscore.Fail; break; default: return(string.Empty); } //Update to database string cmdString = isNewRecord ? newscore.GetInsert("scores") : oldscore.GetUpdate(newscore, "scores"); System.Diagnostics.Debug.WriteLine(cmdString); using (var connection = GetConnection()) { connection.Open(); var cmd = new SQLiteCommand(cmdString, connection); System.Diagnostics.Debug.WriteLine($"Update local score : {cmd.ExecuteNonQuery()}"); } return(cmdString); }