예제 #1
0
        private async Task Receive(WebSocket socket)
        {
            var playerID = gameServer.FindPlayer(socket)?.PlayerId ?? 0;

            if (playerID <= 0)
            {
                logger.LogInformation($"#### Invalid player ID: {playerID} ####");
                return;
            }

            logger.LogInformation($"#### Receiving for ID: {playerID} ####");

            using (var buffer = bufferManager.GetBuffer())
            {
                try
                {
                    var result = await socket.ReceiveAsync(buffer.Buffer, CancellationToken.None);

                    while (!result.CloseStatus.HasValue)
                    {
                        HandleMessage(result, playerID, buffer.Buffer);
                        result = await socket.ReceiveAsync(buffer.Buffer, CancellationToken.None);
                    }

                    gameServer.ClosedConnection(playerID);
                }
                catch (Exception)
                {
                }
            }
        }