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); }
public void ShouldNotAssignFirstTaskTest4() { var recalcDateTime = new DateTime(2010, 1, 1, 22, 0, 0); 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, recalcDateTime)); mocks.ReplayAll(); service.RecalcGameState(recalcDateTime); mocks.VerifyAll(); }
public void CanAssignSecondTaskTipTest() { 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 } }; teamTaskState.AcceptedTips.Add(new AcceptedTip { Tip = new Tip { Name = "Tip 0", SuspendTime = 0 } }); var tip = new Tip { Name = "Tip 1", SuspendTime = 30 }; service.AssignNewTaskTip(teamTaskState, tip, recalcTime); mocks.VerifyAll(); Assert.AreEqual(2, teamTaskState.AcceptedTips.Count()); Assert.AreEqual(recalcTime, teamTaskState.AcceptedTips[1].AcceptTime); Assert.AreEqual(tip, teamTaskState.AcceptedTips[1].Tip); Assert.AreEqual(teamTaskState, teamTaskState.AcceptedTips[1].TeamTaskState); }
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 CloseTaskForTeam(TeamTaskState teamTaskState, TeamTaskStateFlag flag, DateTime recalcTime) { teamTaskState.TaskFinishTime = recalcTime; teamTaskState.State = (int)flag; teamTaskState.TeamGameState.ActiveTaskState = null; teamTaskState.TeamGameState.AcceptedTasks.Add(teamTaskState); }
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 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 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)); }
public DataTable GetGameResults(int gameId) { DataTable dt = new DataTable("GameResults"); DataColumn rankColumn = new DataColumn("rank", typeof(int)); DataColumn teamColumn = new DataColumn("team", typeof(string)); DataColumn tasksColumn = new DataColumn("tasks", typeof(int)); DataColumn bonusColumn = new DataColumn("bonus", typeof(int)); DataColumn timeColumn = new DataColumn("time", typeof(TimeSpan)); dt.Columns.AddRange(new DataColumn[] { rankColumn, teamColumn, tasksColumn, bonusColumn, timeColumn }); Game game = gameRepository.Get(gameId); // Выбираем команды закончившие игру foreach (Team team in game.Teams.Where(x => x.TeamGameState != null && x.TeamGameState.GameDoneTime != null)) { // Количество успешно выполненных заданий int tasks = team.TeamGameState.AcceptedTasks.Count(t => t.State == (int)TeamTaskStateFlag.Success); // Количество бонусов int bonus = team.TeamGameState.AcceptedTasks.BonusCodesCount(); // Время выполнения последнего успешно выполненного задания DateTime lastTaskTime = game.GameDate; var taskStates = team.TeamGameState.AcceptedTasks.Where(x => x.State == (int)TeamTaskStateFlag.Success); if (taskStates.Count() > 0) { TeamTaskState tts = taskStates.Last(); lastTaskTime = (DateTime)tts.TaskFinishTime; } DataRow row = dt.NewRow(); row[teamColumn] = team.Name; row[tasksColumn] = tasks; row[bonusColumn] = bonus; row[timeColumn] = lastTaskTime - game.GameDate; dt.Rows.Add(row); } return(dt); }
/// <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); }
/// <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); }
/// <summary> /// Возвращает варианты выбора подсказок, если это необходимо для задания с выбором подсказки. /// </summary> public IEnumerable <Tip> GetSuggestTips(TeamTaskState teamTaskState, DateTime recalcTime) { return(taskService.GetSuggestTips(teamTaskState, recalcTime)); }
/// <summary> /// "Ускориться". /// </summary> /// <param name="teamTaskState">Состояние команды затребовавшая ускорение.</param> /// <param name="dateTimeNow"></param> public void AccelerateTask(TeamTaskState teamTaskState, DateTime dateTimeNow) { taskService.AccelerateTask(teamTaskState, dateTimeNow); }
/// <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); }
/// <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); }