private void TimeIsExpired(Kv kv)
        {
            GameResultE result = (GameResultE)kv.GetInt32("GameResult");

            base.Game.TimeExpired(result, false);
            ClockUc.TimeExpired(result);
        }
示例#2
0
        public void TimeExpired(GameResultE result, bool isSendResult)
        {
            int gameID         = 0;
            int opponentUserID = 0;

            if (DbGame != null)
            {
                gameID         = DbGame.GameID; // DbGame is null once AfterFinish is called in Finish()
                opponentUserID = DbGame.OpponentUserID;
            }

            Flags.IsTimeExpired = true;

            if (result == GameResultE.InProgress)
            {
                if (Flags.AmIBlack) // black clock expired
                {
                    Finish(GameResultE.WhiteWin);
                }
                else
                {
                    Finish(GameResultE.WhiteLose);
                }
            }
            else
            {
                Finish(result);
            }

            if (Flags.IsOnline && isSendResult)
            {
                SocketClient.TimeExpired(gameID, GameResult, opponentUserID, Flags.Flags);
            }
        }
示例#3
0
 public Game(Game g)
 {
     this.Flags           = new GameFlags(this);
     this.Flags.Flags     = g.Flags.Flags;
     this.Moves           = new Moves(this);
     this.Moves.DataTable = g.Moves.DataTable.Copy();
     this.GameResult      = g.GameResult;
 }
示例#4
0
        public void TimeExpired(GameResultE result)
        {
            RefreshClock();

            bool isWhiteTurn = (result == GameResultE.WhiteLose); // it will be white's turn if white is lost due to time expire!

            SetClockExpired(isWhiteTurn);
        }
示例#5
0
        public void Finish(GameResultE gameResult)
        {
            if (Flags.IsGameFinished)
            {
                return; // we can not finish a game more than once
            }

            if (BeforeFinish != null)
            {
                BeforeFinish(this, EventArgs.Empty);
            }

            GameResult = gameResult;

            switch (gameResult)
            {
            case GameResultE.None:
                break;

            case GameResultE.InProgress:
                break;

            case GameResultE.WhiteWin:
                GameData.Result = "1-0";
                break;

            case GameResultE.WhiteLose:
                GameData.Result = "0-1";
                break;

            case GameResultE.Draw:
                GameData.Result = "1/2-1/2";
                break;

            case GameResultE.Absent:
                GameData.Result = "Line";
                break;

            case GameResultE.NoResult:
                GameData.Result = "Line";
                break;

            default:
                break;
            }

            Notations.GameFinished();

            GameData.Save();

            AutoSaveGame();

            if (AfterFinish != null)
            {
                AfterFinish(this, EventArgs.Empty);
            }
        }
示例#6
0
        public void Resign(GameResultE result)
        {
            int gameID         = 0;
            int opponentUserID = 0;

            if (DbGame != null)
            {
                gameID         = DbGame.GameID; // DbGame is null once AfterFinish is called in Finish()
                opponentUserID = DbGame.OpponentUserID;
            }

            bool whiteWin = false;

            switch (result)
            {
            case GameResultE.InProgress:
                if (Flags.IsOffline)
                {
                    whiteWin = ResignOffline();    // Flags.AmIBlack;
                }
                else
                {
                    if (DbGame.IsCurrentUserBlack)
                    {
                        whiteWin = true;
                    }
                }
                break;

            case GameResultE.WhiteWin:
                whiteWin = true;
                break;

            case GameResultE.WhiteLose:
                whiteWin = false;
                break;
            }

            Flags.IsResigned = true;

            if (whiteWin)
            {
                this.Finish(GameResultE.WhiteWin);
            }
            else
            {
                this.Finish(GameResultE.WhiteLose);
            }

            if (Flags.IsOnline && result == GameResultE.InProgress)
            {
                SocketClient.Resign(gameID, GameResult, opponentUserID, Flags.Flags);
            }
        }
        public static void KingStaleMated(int gameId, string gameXml, GameResultE gameResult, int opponentUserID, string flags)
        {
            Kv kv = new Kv();

            kv.Set("MethodName", (int)MethodNameE.KingStaleMated);
            kv.Set("OpponentUserID", opponentUserID);
            kv.Set("GameID", gameId);
            kv.Set("GameXml", gameXml);
            kv.Set("GameResult", (int)gameResult);
            kv.Set("GameFlags", flags);

            SocketClient.Instance.InvokeAsync(kv.DataTable);
        }
        public static void Draw(int methodID, int gameID, GameResultE gameResult, int opponentUserID, string flags)
        {
            Kv kv = new Kv();

            kv.Set("MethodName", (int)MethodNameE.Draw);
            kv.Set("OpponentUserID", opponentUserID);
            kv.Set("Draw", methodID);
            if (methodID == (int)DrawE.Accepted)
            {
                kv.Set("GameID", gameID);
                kv.Set("GameXml", "");
                kv.Set("GameResult", (int)gameResult);
                kv.Set("GameFlags", flags);
            }

            SocketClient.Instance.InvokeAsync(kv.DataTable);
        }
示例#9
0
        public void Resign(GameResultE result)
        {
            bool whiteWin = false;

            switch (result)
            {
            case GameResultE.InProgress:
                if (Flags.IsOffline)
                {
                    whiteWin = Flags.AmIBlack;
                }
                else
                {
                    if (DbGame.IsCurrentUserBlack)
                    {
                        whiteWin = true;
                    }
                }
                break;

            case GameResultE.WhiteWin:
                whiteWin = true;
                break;

            case GameResultE.WhiteLose:
                whiteWin = false;
                break;
            }

            Flags.IsResigned = true;

            if (whiteWin)
            {
                this.Finish(GameResultE.WhiteWin);
            }
            else
            {
                this.Finish(GameResultE.WhiteLose);
            }

            if (Flags.IsOnline && result == GameResultE.InProgress)
            {
                MessageFactory.Resign(DbGame.GameID, GameResult);
            }
        }
示例#10
0
        public void SetFen(string fen)
        {
            if (string.IsNullOrEmpty(fen) || !GameValidator.IsValidFen(fen))
            {
                return;
            }

            if (BeforeSetFen != null)
            {
                BeforeSetFen(this, EventArgs.Empty);
            }

            GameValidator = new GameW(fen);

            if (Flags.IsOffline)
            {
                if (Flags.IsClickedByUser)
                {
                    if (IsSwapPlayersRequired)
                    {
                        SwapPlayers();
                    }
                }
                else
                {
                    Clock.Reset();
                    Clock.Stop();
                    GameResult = GameResultE.InProgress;
                }

                Flags.EnPassant = SquareE.NoSquare;
                ResetCounters();
            }

            if (AfterSetFen != null)
            {
                AfterSetFen(this, EventArgs.Empty);
            }
        }
示例#11
0
 public static void UpdateGameStatusWithTournamentMatchID(Cxt cxt, SqlTransaction trans, string gameIDs, GameResultE gameResultID)
 {
     BaseCollection.Execute(trans, "UpdateGameStatusWithTournamentMatchID",
                            gameIDs, gameResultID.ToString("d"),
                            cxt.CurrentUserID, DateTime.Now);
 }
示例#12
0
        public static void UpdateGameDataByGameID(int gameID, string lastMoveGameXml, GameResultE gameResult, string gameFlags, int opponentUserID)
        {
            Kv kv = new Kv();

            kv.Set("MethodName", (int)MethodNameE.UpdateGameDataByGameID);
            kv.Set("GameID", gameID);
            kv.Set("GameXml", lastMoveGameXml);
            kv.Set("GameResult", (int)gameResult);
            kv.Set("GameFlags", gameFlags);
            kv.Set("OpponentUserID", opponentUserID);
            SocketClient.Instance.InvokeAsync(kv.DataTable);
        }
        private void ForcedGameWin(Kv kv)
        {
            GameResultE result = (GameResultE)kv.GetInt32("GameResultID");

            base.Game.GameForcefullyFinished(result);
        }
        private void UserResign(Kv kv)
        {
            GameResultE result = (GameResultE)kv.GetInt32("GameResult");

            base.Game.Resign(result);
        }
示例#15
0
        public void Finish(GameResultE gameResult)
        {
            if (Flags.IsGameFinished)
            {
                return; // we can not finish a game more than once
            }

            if (BeforeFinish != null)
            {
                BeforeFinish(this, EventArgs.Empty);
            }

            GameResult = gameResult;

            switch (gameResult)
            {
            case GameResultE.None:
                break;

            case GameResultE.InProgress:
                break;

            case GameResultE.WhiteWin:
                GameData.Result = "1-0";
                break;

            case GameResultE.WhiteLose:
                GameData.Result = "0-1";
                break;

            case GameResultE.Draw:
                GameData.Result = "1/2-1/2";
                break;

            case GameResultE.Absent:
                GameData.Result = "Line";
                break;

            case GameResultE.NoResult:
                GameData.Result = "Line";
                break;

            case GameResultE.ForcedWhiteLose:
                GameData.Result = "0-1 (Forced black win)";
                break;

            case GameResultE.ForcedWhiteWin:
                GameData.Result = "1-0 (Forced white win)";
                break;

            case GameResultE.ForcedDraw:
                GameData.Result = "1/2-1/2 (Forced draw)";
                break;

            default:
                break;
            }

            Notations.GameFinished();

            if (!Flags.IsDatabaseGame)
            {
                GameData.Save();
                AutoSaveGame();
            }

            //if (Flags.IsOnline && Flags.IsTimeExpired && (Flags.IsMyTurn || Flags.IsTournamentMatchTimeExpired))
            //{
            //    SocketClient.TimeExpired(DbGame.GameID, GameResult, DbGame.OpponentUserID, Flags.Flags);
            //}

            if (AfterFinish != null)
            {
                AfterFinish(this, EventArgs.Empty);
            }
        }
示例#16
0
 public void GameForcefullyFinished(GameResultE gameResult)
 {
     Finish(gameResult);
 }
        private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.ColumnIndex == 5 || e.ColumnIndex == 8 || e.ColumnIndex == 9 || e.ColumnIndex == 10 || e.ColumnIndex == 13)
            {
                if (dataGridView1["WhiteUserID", e.RowIndex].Value.ToString() != userID.ToString())
                {
                    switch (e.ColumnIndex)
                    {
                    case 5:
                        e.Value = dataGridView1["WhiteUserName", e.RowIndex].Value;
                        break;

                    case 8:
                        e.Value = dataGridView1["EloWhite", e.RowIndex].Value;
                        break;

                    case 9:
                        if (dataGridView1["GameResultID", e.RowIndex].Value != null)
                        {
                            string      result     = string.Empty;
                            GameResultE gameResult = (GameResultE)UData.ToInt32(dataGridView1["GameResultID", e.RowIndex].Value.ToString());
                            switch (gameResult)
                            {
                            case GameResultE.None:
                                break;

                            case GameResultE.InProgress:
                                break;

                            case GameResultE.WhiteWin:
                                result = "0";
                                break;

                            case GameResultE.WhiteLose:
                                result = "1";
                                break;

                            case GameResultE.Draw:
                                result = "1/2";
                                break;

                            case GameResultE.Absent:
                                break;

                            case GameResultE.NoResult:
                                break;

                            case GameResultE.WhiteBye:
                                result = "1";
                                break;

                            case GameResultE.BlackBye:
                                result = "0";
                                break;

                            case GameResultE.ForcedWhiteWin:
                                result = "0";
                                break;

                            case GameResultE.ForcedWhiteLose:
                                result = "1";
                                break;

                            case GameResultE.ForcedDraw:
                                result = "1/2";
                                break;

                            default:
                                break;
                            }
                            e.Value = result;
                        }
                        break;

                    case 10:
                        e.Value = "White";
                        break;

                    case 13:
                        if (dataGridView1["WhiteUserCountry", e.RowIndex].Value != null && dataGridView1["WhiteUserCountry", e.RowIndex].Value.ToString() != "" && dataGridView1["WhiteUserCountry", e.RowIndex].Value.ToString() != "0")
                        {
                            Image item = Image.FromFile(App.Model.Ap.FolderImages + @"Flags\" + dataGridView1["WhiteUserCountry", e.RowIndex].Value + ".PNG");
                            e.Value = item;
                        }
                        else
                        {
                            Image item = Image.FromFile(App.Model.Ap.FolderImages + @"Flags\244.PNG");
                            e.Value = item;
                        }
                        break;
                    }
                }
                else
                {
                    switch (e.ColumnIndex)
                    {
                    case 5:
                        e.Value = dataGridView1["BlackUserName", e.RowIndex].Value;
                        break;

                    case 8:
                        e.Value = dataGridView1["EloBlack", e.RowIndex].Value;
                        break;

                    case 9:
                        if (dataGridView1["GameResultID", e.RowIndex].Value != null)
                        {
                            string      result     = string.Empty;
                            GameResultE gameResult = (GameResultE)UData.ToInt32(dataGridView1["GameResultID", e.RowIndex].Value.ToString());
                            switch (gameResult)
                            {
                            case GameResultE.None:
                                break;

                            case GameResultE.InProgress:
                                break;

                            case GameResultE.WhiteWin:
                                result = "1";
                                break;

                            case GameResultE.WhiteLose:
                                result = "0";
                                break;

                            case GameResultE.Draw:
                                result = "1/2";
                                break;

                            case GameResultE.Absent:
                                break;

                            case GameResultE.NoResult:
                                break;

                            case GameResultE.WhiteBye:
                                result = "0";
                                break;

                            case GameResultE.BlackBye:
                                result = "1";
                                break;

                            case GameResultE.ForcedWhiteWin:
                                result = "1";
                                break;

                            case GameResultE.ForcedWhiteLose:
                                result = "0";
                                break;

                            case GameResultE.ForcedDraw:
                                result = "1/2";
                                break;

                            default:
                                break;
                            }
                            e.Value = result;
                        }
                        break;

                    case 10:
                        e.Value = "Black";
                        break;

                    case 13:
                        if (dataGridView1["BlackUserCountry", e.RowIndex].Value != null && dataGridView1["BlackUserCountry", e.RowIndex].Value.ToString() != "" && dataGridView1["BlackUserCountry", e.RowIndex].Value.ToString() != "0")
                        {
                            Image item = Image.FromFile(App.Model.Ap.FolderImages + @"Flags\" + dataGridView1["BlackUserCountry", e.RowIndex].Value + ".PNG");
                            e.Value = item;
                        }
                        else
                        {
                            Image item = Image.FromFile(App.Model.Ap.FolderImages + @"Flags\244.PNG");
                            e.Value = item;
                        }
                        break;
                    }
                }
            }
        }
示例#18
0
        public static void UpdateStatus(SqlTransaction trans, Cxt cxt, TournamentMatchStatusE tournamentMatchStatusID, string tournamentMatchIDs, GameResultE gameResultID)
        {
            StringBuilder sb = new StringBuilder();

            BaseCollection.Execute(trans, "UpdateTournamentMatchStatus",
                                   tournamentMatchIDs,
                                   tournamentMatchStatusID.ToString("d"),
                                   gameResultID.ToString("d"),
                                   cxt.CurrentUserID
                                   );

            if (tournamentMatchStatusID != TournamentMatchStatusE.Scheduled &&
                tournamentMatchStatusID != TournamentMatchStatusE.Absent)
            {
                BaseCollection.Execute(trans, "UpdateTournamentChallengeStatus",
                                       tournamentMatchIDs,
                                       StatusE.Deleted.ToString("d"),
                                       cxt.CurrentUserID);
            }
        }
示例#19
0
        public static void UpdateStatus(Cxt cxt, TournamentMatchStatusE tournamentMatchStatusID, string tournamentMatchIDs, GameResultE gameResultID)
        {
            SqlTransaction trans = null;

            try
            {
                trans = SqlHelper.BeginTransaction(Config.ConnectionString);

                UpdateStatus(trans, cxt, tournamentMatchStatusID, tournamentMatchIDs, gameResultID);

                SqlHelper.CommitTransaction(trans);
            }
            catch (Exception ex)
            {
                SqlHelper.RollbackTransaction(trans);
                Log.Write(cxt, ex);
            }
        }