Esempio n. 1
0
        public async Task UpdateSession([FromBody] SessionChangeRequest model)
        {
            await Validate(model);

            AuthorizeAny(
                () => Actor.IsRegistrar
                );

            var result = await PlayerService.ExtendSession(model);

            await Hub.Clients.Group(result.TeamId).TeamEvent(
                new HubEvent <TeamState>(Mapper.Map <TeamState>(result), EventAction.Updated)
                );
        }
Esempio n. 2
0
        public async Task <Player> ExtendSession(SessionChangeRequest model)
        {
            var team = await Store.ListTeam(model.TeamId);

            if (team.First().IsLive.Equals(false))
            {
                throw new SessionNotActive();
            }

            if (team.First().SessionEnd >= model.SessionEnd)
            {
                throw new InvalidSessionWindow();
            }

            foreach (var player in team)
            {
                player.SessionEnd = model.SessionEnd;
            }

            await Store.Update(team);

            // push gamespace extension
            var challenges = await Store.DbContext.Challenges
                             .Where(c => c.TeamId == team.First().TeamId)
                             .Select(c => c.Id)
                             .ToArrayAsync()
            ;

            foreach (string id in challenges)
            {
                await Mojo.UpdateGamespaceAsync(new ChangedGamespace
                {
                    Id             = id,
                    ExpirationTime = model.SessionEnd
                });
            }

            return(Mapper.Map <Player>(
                       team.FirstOrDefault(p =>
                                           p.Role == PlayerRole.Manager
                                           )
                       ));
        }
Esempio n. 3
0
 private async Task _validate(SessionChangeRequest model)
 {
     await Task.CompletedTask;
 }