Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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);
        }