public static Team AssignTask(this Team team, Task task, DateTime taskStartTime)
 {
     var tts = new TeamTaskState
     {
         Task = task,
         TaskStartTime = taskStartTime,
         TeamGameState = team.TeamGameState
     };
     team.TeamGameState.ActiveTaskState = tts;
     return team;
 }
        public void CanAssignNewTaskTipTest()
        {
            DateTime recalcTime = DateTime.Now;

            Expect.Call(acceptedTipRepository.SaveOrUpdate(null)).IgnoreArguments();

            mocks.ReplayAll();

            var service = new TaskService(taskRepository, teamTaskStateRepository, acceptedCodeRepository,
                                          acceptedBadCodeRepository, acceptedTipRepository, dispatcherFactory);

            var teamTaskState = new TeamTaskState { TeamGameState = new TeamGameState { Game = game, Team = team } };

            var tip = new Tip();
            service.AssignNewTaskTip(teamTaskState, tip, recalcTime);

            mocks.VerifyAll();

            Assert.AreEqual(1, teamTaskState.AcceptedTips.Count());
            Assert.AreEqual(recalcTime, teamTaskState.AcceptedTips[0].AcceptTime);
            Assert.AreEqual(tip, teamTaskState.AcceptedTips[0].Tip);
            Assert.AreEqual(teamTaskState, teamTaskState.AcceptedTips[0].TeamTaskState);
        }
        public void ShouldNotAssignFirstTaskTest4()
        {
            var team = new Team();
            var tts = new TeamTaskState { Task = task1 };
            var tgs = new TeamGameState { Game = game, Team = team, ActiveTaskState = tts };
            tgs.AcceptedTasks.Add(tts);
            team.TeamGameState = tgs;
            game.Teams.Add(team);

            Expect.Call(repository.Get(1))
                .Return(game).Repeat.Any();

            DoNotExpect.Call(() => gameService.AssignNewTask(tgs, null));

            mocks.ReplayAll();

            service.RecalcGameState(new DateTime(2010, 1, 1, 22, 0, 0));

            mocks.VerifyAll();
        }
Esempio n. 4
0
 /// <summary>
 /// Отправить команде подсказку.
 /// </summary>
 /// <param name="teamTaskState"></param>
 /// <param name="tip"></param>
 public void AssignNewTaskTip(TeamTaskState teamTaskState, Tip tip)
 {
     taskService.AssignNewTaskTip(teamTaskState, tip);
 }
Esempio n. 5
0
 /// <summary>
 /// "Ускориться".
 /// </summary>
 /// <param name="teamTaskState">Состояние команды затребовавшая ускорение.</param>
 public void AccelerateTask(TeamTaskState teamTaskState)
 {
     taskService.AccelerateTask(teamTaskState);
 }
Esempio n. 6
0
 /// <summary>
 /// Возвращает варианты выбора подсказок, если это необходимо для задания с выбором подсказки.
 /// </summary>
 public IEnumerable<Tip> GetSuggestTips(TeamTaskState teamTaskState)
 {
     return taskService.GetSuggestTips(teamTaskState);
 }
Esempio n. 7
0
 /// <summary>
 /// Помечает задание как успешно выполненное.
 /// </summary>
 /// <param name="teamTaskState"></param>
 public void CloseTaskForTeam(TeamTaskState teamTaskState, TeamTaskStateFlag flag)
 {
     taskService.CloseTaskForTeam(teamTaskState, flag);
 }
Esempio n. 8
0
        public void CloseTaskForTeam(TeamTaskState teamTaskState, TeamTaskStateFlag flag)
        {
            teamTaskState.TaskFinishTime = DateTime.Now;
            teamTaskState.State = (int) flag;
            teamTaskStateRepository.SaveOrUpdate(teamTaskState);

            teamTaskState.TeamGameState.ActiveTaskState = null;
            teamTaskState.TeamGameState.AcceptedTasks.Add(teamTaskState);
            teamGameStateRepository.SaveOrUpdate(teamTaskState.TeamGameState);

            teamGameStateRepository.DbContext.CommitChanges();
        }
Esempio n. 9
0
 /// <summary>
 /// "Ускориться".
 /// </summary>
 /// <param name="teamTaskState">Состояние команды затребовавшая ускорение.</param>
 /// <param name="dateTimeNow"></param>
 public void AccelerateTask(TeamTaskState teamTaskState, DateTime dateTimeNow)
 {
     taskService.AccelerateTask(teamTaskState, dateTimeNow);
 }
Esempio n. 10
0
        /// <summary>
        /// Возвращает варианты выбора подсказок, если это необходимо для задания с выбором подсказки.
        /// </summary>
        public IEnumerable<Tip> GetSuggestTips(TeamTaskState teamTaskState, DateTime recalcTime)
        {
            // Время от начала задания
            double taskTimeSpend = (recalcTime - teamTaskState.TaskStartTime).TotalMinutes;
            // Время получения последней из полученных подсказок
            double lastAcceptTipTime = (teamTaskState.AcceptedTips.Last().AcceptTime - teamTaskState.TaskStartTime).TotalMinutes;
            // Подсказки,
            // которые дожны быть выданы на данный момент,
            var tips = new List<Tip>(teamTaskState.Task.Tips
                .Where(tip => tip.SuspendTime > lastAcceptTipTime && tip.SuspendTime <= taskTimeSpend && tip.SuspendTime < teamTaskState.TeamGameState.Game.TimePerTask));

            // Если пришло время предложить команде выбрать подсказку
            if (tips.Count() > 0)
            {
                // Все подсказки, исключая уже выданные
                return teamTaskState.Task.Tips
                    .Where(tip => tip.SuspendTime > 0)
                    .Except(teamTaskState.AcceptedTips.Tips());
            }

            return null;
        }
Esempio n. 11
0
        public void CloseTaskForTeam(TeamTaskState teamTaskState, TeamTaskStateFlag flag, DateTime recalcTime)
        {
            teamTaskState.TaskFinishTime = recalcTime;
            teamTaskState.State = (int) flag;

            teamTaskState.TeamGameState.ActiveTaskState = null;
            teamTaskState.TeamGameState.AcceptedTasks.Add(teamTaskState);
        }
Esempio n. 12
0
        public void AssignNewTaskTip(TeamTaskState teamTaskState, Tip tip, DateTime recalcTime)
        {
            AcceptedTip acceptedTip = new AcceptedTip
                {
                  AcceptTime = recalcTime,
                  Tip = tip,
                  TeamTaskState = teamTaskState
                };

            //Подсказку дадим только в том случае, если такая еще не выдавалась.
            if (!teamTaskState.AcceptedTips.Any(x => x.Tip == tip))
            {
                teamTaskState.AcceptedTips.Add(acceptedTip);
                acceptedTipRepository.SaveOrUpdate(acceptedTip);
            }
        }
        public void ShouldNotAssignDuodleTipTest()
        {
            DateTime recalcTime = DateTime.Now;

            DoNotExpect.Call(acceptedTipRepository.SaveOrUpdate(null));

            mocks.ReplayAll();

            var service = new TaskService(taskRepository, teamTaskStateRepository, acceptedCodeRepository,
                                          acceptedBadCodeRepository, acceptedTipRepository, dispatcherFactory);

            var teamTaskState = new TeamTaskState { TeamGameState = new TeamGameState { Game = game, Team = team } };
            var tip = new Tip { Name = "Tip 0", SuspendTime = 0 };
            teamTaskState.AcceptedTips.Add(new AcceptedTip { Tip = tip });
            service.AssignNewTaskTip(teamTaskState, tip, recalcTime);

            mocks.VerifyAll();

            Assert.AreEqual(1, teamTaskState.AcceptedTips.Count());
        }
        public void CloseTaskForTeamTest()
        {
            var service = new TaskService(taskRepository, teamTaskStateRepository, acceptedCodeRepository,
                                          acceptedBadCodeRepository, acceptedTipRepository, dispatcherFactory);

            DateTime recalcTime = DateTime.Now;
            var teamTaskState = new TeamTaskState { TeamGameState = new TeamGameState { Game = game, Team = team } };
            service.CloseTaskForTeam(teamTaskState, TeamTaskStateFlag.Success, recalcTime);

            Assert.AreEqual(recalcTime, teamTaskState.TaskFinishTime);
            Assert.AreEqual((int)TeamTaskStateFlag.Success, teamTaskState.State);
            Assert.IsNull(teamTaskState.TeamGameState.ActiveTaskState);
            Assert.True(teamTaskState.TeamGameState.AcceptedTasks.Contains(teamTaskState));
        }
Esempio n. 15
0
 /// <summary>
 /// Помечает задание как успешно выполненное.
 /// </summary>
 /// <param name="teamTaskState"></param>
 /// <param name="flag"></param>
 /// <param name="recalcTime"></param>
 public void CloseTaskForTeam(TeamTaskState teamTaskState, TeamTaskStateFlag flag, DateTime recalcTime)
 {
     taskService.CloseTaskForTeam(teamTaskState, flag, recalcTime);
 }
Esempio n. 16
0
 /// <summary>
 /// "Ускориться".
 /// </summary>
 /// <remarks>
 /// Устанавливает время ускорения в текущее и назначает вторую подсказку.
 /// </remarks>
 /// <param name="teamTaskState">Состояние команды затребовавшая ускорение.</param>
 /// <param name="recalcTime"></param>
 public void AccelerateTask(TeamTaskState teamTaskState, DateTime recalcTime)
 {
     teamTaskState.AccelerationTaskStartTime = recalcTime;
     AssignNewTaskTip(teamTaskState, teamTaskState.Task.Tips.Last(tip => tip.SuspendTime > 0), recalcTime);
 }
Esempio n. 17
0
 /// <summary>
 /// Возвращает варианты выбора подсказок, если это необходимо для задания с выбором подсказки.
 /// </summary>
 public IEnumerable<Tip> GetSuggestTips(TeamTaskState teamTaskState, DateTime recalcTime)
 {
     return taskService.GetSuggestTips(teamTaskState, recalcTime);
 }
Esempio n. 18
0
        public void AssignNewTask(TeamGameState teamGameState, Task oldTask, DateTime recalcTime)
        {
            Check.Require(teamGameState.ActiveTaskState == null, "Невозможно назначить команде новую задачу, т.к. коменде уже назначена задача.");

            // Пытаемся получить следующее задание для команды
            Task newTask = dispatcherFactory.CrearteDispatcher(teamGameState.Game)
                .GetNextTaskForTeam(taskRepository, teamGameState, oldTask);

            // Если нет нового задания, то команда завершила игру
            if (newTask == null)
            {
                TeamFinishGame(teamGameState, recalcTime);
                return;
            }

            TeamTaskState teamTaskState = new TeamTaskState {
                    TaskStartTime = recalcTime,
                    TaskFinishTime = null,
                    State = (int) TeamTaskStateFlag.Execute,
                    TeamGameState = teamGameState,
                    Task = newTask,
                    NextTask = null
                };

            teamGameState.ActiveTaskState = teamTaskState;

            teamTaskStateRepository.SaveOrUpdate(teamTaskState);
            //Сразу же отправляем команде первую подсказку (т.е. текст задания)
            AssignNewTaskTip(teamTaskState, teamTaskState.Task.Tips.First(), recalcTime);
        }
Esempio n. 19
0
 /// <summary>
 /// Отправить команде подсказку.
 /// </summary>
 /// <param name="teamTaskState"></param>
 /// <param name="tip"></param>
 /// <param name="dateTimeNow"></param>
 public void AssignNewTaskTip(TeamTaskState teamTaskState, Tip tip, DateTime dateTimeNow)
 {
     taskService.AssignNewTaskTip(teamTaskState, tip, dateTimeNow);
 }
Esempio n. 20
0
 /// <summary>
 /// "Ускориться".
 /// </summary>
 /// <remarks>
 /// Устанавливает время ускорения в текущее и назначает вторую подсказку.
 /// </remarks>
 /// <param name="teamTaskState">Состояние команды затребовавшая ускорение.</param>
 public void AccelerateTask(TeamTaskState teamTaskState)
 {
     teamTaskState.AccelerationTaskStartTime = DateTime.Now;
     AssignNewTaskTip(teamTaskState, teamTaskState.Task.Tips.Last(tip => tip.SuspendTime > 0));
     teamTaskStateRepository.SaveOrUpdate(teamTaskState);
 }