예제 #1
0
        private async Task AnnouncePokerCardChange(PokerCardChangeRequest request)
        {
            var message = new SocketMessage <string>
            {
                MessageType = "announce",
                Payload     = $"{request.Name} has changed poker-card to {request.Value}"
            };

            await SendAll(message.ToJson());
        }
예제 #2
0
        private async Task HandlePokerCardChangeRequest(PokerCardChangeRequest request)
        {
            var thePokerCard = _pokerCards.FirstOrDefault(sq => sq.Name == request.Name);

            if (thePokerCard == null)
            {
                thePokerCard = new PokerCard()
                {
                    Disabled = request.Disabled,
                    Name     = request.Name
                };
                _pokerCards.Add(thePokerCard);
            }
            thePokerCard.Value = request.Value;
            await SendPokerCardsToAll();
            await AnnouncePokerCardChange(request);
        }
예제 #3
0
        public async Task AddUser(WebSocket socket)
        {
            try
            {
                var name = GenerateName();
                var userAddedSuccessfully = _users.TryAdd(name, socket);
                while (!userAddedSuccessfully)
                {
                    name = GenerateName();
                    userAddedSuccessfully = _users.TryAdd(name, socket);
                }

                GiveUserTheirName(name, socket).Wait();
                AnnounceNewUser(name).Wait();
                SendPokerCards(socket).Wait();
                while (socket.State == WebSocketState.Open)
                {
                    var buffer = new byte[1024 * 4];
                    WebSocketReceiveResult socketResponse;
                    var package = new List <byte>();
                    do
                    {
                        socketResponse = await socket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);

                        package.AddRange(new ArraySegment <byte>(buffer, 0, socketResponse.Count));
                    } while (!socketResponse.EndOfMessage);
                    var bufferAsString = System.Text.Encoding.ASCII.GetString(package.ToArray());
                    if (!string.IsNullOrEmpty(bufferAsString))
                    {
                        var changeRequest = PokerCardChangeRequest.FromJson(bufferAsString);
                        await HandlePokerCardChangeRequest(changeRequest);
                    }
                }
                await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
            }
            catch (Exception ex)
            { }
        }