public GetMoveState(GameManagerState state, [NotNull] GameBoard activeBoard) { _cancellationTokenSource = new CancellationTokenSource(); State = state; ActiveBoard = activeBoard.EnsureNotNull(); IsCancelled = new SyncValueContainer <bool>(); }
public GameManager( [NotNull] ILogger logger, [NotNull] IChessPlayer white, [NotNull] IChessPlayer black, [NotNull] GameBoard gameBoard) { if (gameBoard is null) { throw new ArgumentNullException(nameof(gameBoard)); } _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _instanceIndex = Interlocked.Increment(ref _instanceCounter); White = white ?? throw new ArgumentNullException(nameof(white)); Black = black ?? throw new ArgumentNullException(nameof(black)); _gameBoards = new Stack <GameBoard>(gameBoard.GetHistory()); _thread = new Thread(ExecuteGame) { Name = $@"{ThisTypeName}: Thread #{_instanceIndex}", IsBackground = true, Priority = ThreadPriority.Normal }; _getMoveStateContainer = new SyncValueContainer <GetMoveState>(null, _syncLock); _gameControl = new GameControl(); _state = GameManagerState.Paused; _whiteTotalStopwatch = new Stopwatch(); _blackTotalStopwatch = new Stopwatch(); _whiteLastMoveStopwatch = new Stopwatch(); _blackLastMoveStopwatch = new Stopwatch(); _thread.Start(); }