コード例 #1
0
        public async Task SendNextRound(string group)
        {
            try
            {
                // check that this is initiated by the owner
                if (!GroupDetails.TryGetOwner(group, out string ownerconnectionid) ||
                    !string.Equals(Context.ConnectionId, ownerconnectionid, StringComparison.OrdinalIgnoreCase))
                {
                    return;
                }

                // choose details about the next round
                if (!GroupDetails.StartNextRound(group, out RoundDetails round))
                {
                    await Clients.Group(group).SendAsync("ReceiveMessage", "failed to start round");

                    return;
                }

                // give credit for the drawer
                GroupDetails.AddToScore(group, round.ConnectionId, round.Timeout / 3f);
                GroupDetails.SetHasAnswered(group, round.ConnectionId);

                // notify everyone except the drawer
                await Clients.GroupExcept(group, round.ConnectionId).SendAsync("ReceiveNextRound", round.Username, round.Timeout, round.ObfuscatedWord, false /* candraw */);

                // notify the drawer
                await Clients.Client(round.ConnectionId).SendAsync("ReceiveNextRound", round.Username, round.Timeout, round.Word, true /* candraw */);
            }
            catch (Exception e)
            {
                await Clients.Group(group).SendAsync("ReceiveMessage", $"failed to start next round: {e.Message}");
            }
        }