private void NotifyAboutOpponentsMove( IDictionary <IActorRef, bool> playersActions) { Competitors .QueryFor <Acknowledged>( (x) => GetOpponentAction(x, playersActions) , Context , _configuration.Timeout); }
public TicTacToeCompetition( IEnumerable <IActorPlayer> competitorActors) : base(competitorActors) { _gameBoard = new TicTacBoard(); _roundIndex = 0; Receive <Messages.RunRound>(msg => { var activePlayerIndex = _roundIndex % 2; var activePlayer = Competitors[activePlayerIndex]; activePlayer.AskFor <SymbolPlacement>( new RunMethodMessage("place_symbol") , Context , TimeSpan.FromSeconds(5)); }); Receive <TypedAskResult <SymbolPlacement> >(msg => { _gameBoard.AddSymbol(msg.Sender, msg.Answer); if (_gameBoard.IsPlayerWinner(msg.Sender) || _gameBoard.IsFull() || _gameBoard.IsIllegalMoveCommitted()) { Conclude(); return; } Self.Tell(new Messages.PropagateGameState()); }); Receive <Messages.PropagateGameState>(msg => { Competitors .QueryFor <Acknowledged>( (x) => new RunMethodMessage("update_game_state", _gameBoard.GetContextPayload(x, 'X', 'O')) , Context , TimeSpan.FromSeconds(10)); }); Receive <TypedQueryResult <Acknowledged> >(msg => { _roundIndex++; Self.Tell(new Messages.RunRound()); }); }
public DilemmaCompetition( IEnumerable <IActorPlayer> competitorActors , IDilemmaConfiguration configuration) : base(competitorActors) { IActorRef actor = null; _configuration = configuration; _playersScore = Competitors .ToDictionary(x => (IActorRef)x, x => 0); Receive <Messages.StartRound>(msg => { Competitors .QueryFor <bool>( new RunMethodMessage("choose_dilemma") , Context , _configuration.Timeout); }); Receive <TypedQueryResult <bool> >(OnDilemmaQueryReceived); Receive <TypedQueryResult <Acknowledged> >(OnOpponentMoveAck); ReceiveAny(x => Console.WriteLine("cojest")); }