コード例 #1
0
        public List <Move> GetNextMoves(IEnumerable <Move> previousMoves)
        {
            var tasks     = new List <Task <string> >();
            var nextMoves = new List <Move>();

            try
            {
                var roleTaskIds = new Dictionary <string, int?>();

                foreach (var _player in Players)
                {
                    var           player = _player;
                    Task <string> newTask;

                    if (previousMoves.Any())
                    {
                        var previousMovesAsString = String.Empty.JoinAdvanced("(", ") ", previousMoves.Select(n => n.TheMove).ToArray());
                        newTask = new Task <string>(() => player.PlayAsync(MatchId, "(" + previousMovesAsString + ")"));
                    }
                    else
                    {
                        newTask = new Task <string>(() => player.PlayAsync(MatchId, PlayerManagerProtocolConstants.NilReplyString));
                    }

                    roleTaskIds.Add(player.Role, newTask.Id);
                    tasks.Add(newTask);
                    newTask.Start();
                }

                Task.WaitAll(tasks.ToArray());

                foreach (string _role in TheGeneralGame.FindRoles())
                {
                    var role = _role;
                    var task = tasks.Where(n => n.Id == roleTaskIds[role]).First();
                    nextMoves.Add(new Move(role, task.Result));
                }

                return(nextMoves);
            }
            catch (AggregateException ex)
            {
                ex.Handle(_ => false);
            }
            catch (Exception)
            {
                throw;
            }

            return(nextMoves);
        }
コード例 #2
0
        public void StartAllPlayers()
        {
            var tasks = new List <Task <string> >();

            try
            {
                var roles = TheGeneralGame.FindRoles().ToArray();

                int roleCount = 0;
                foreach (var _player in Players)
                {
                    var    player        = _player;
                    string tmpRoleString = roles[roleCount++].ToString();

#if DO_SERIAL
                    var foo = player.StartAsync(MatchId, tmpRoleString, TheGeneralGame.Description, StartClock,
                                                PlayClock);
#else
                    var newTask = new Task <string>(() => player.StartAsync(MatchId, tmpRoleString, TheGeneralGame.Description, StartClock, PlayClock));
                    tasks.Add(newTask);
                    newTask.Start();
#endif
                }

                //Task.WaitAll(tasks.ToArray(), StartClock*1000);
                Task.WaitAll(tasks.ToArray());
            }
            catch (AggregateException ex)
            {
                ex.Handle(_ => false);
            }
            catch (Exception)
            {
                throw;
            }
        }