示例#1
0
        public override async Task SendMessageToChatRoom(IAsyncStreamReader <ChatMessage> requestStream, IServerStreamWriter <ChatMessage> responseStream,
                                                         ServerCallContext context)
        {
            var httpContext = context.GetHttpContext();

            _logger.LogInformation($"Connection id: {httpContext.Connection.Id}");

            if (!await requestStream.MoveNext())
            {
                return;
            }

            _chatRoomService.ConnectCustomerToChatRoom(requestStream.Current.RoomId, Guid.Parse(requestStream.Current.CustomerId), responseStream);
            var user = requestStream.Current.CustomerName;

            _logger.LogInformation($"{user} connected");

            try
            {
                while (await requestStream.MoveNext())
                {
                    if (!string.IsNullOrEmpty(requestStream.Current.Message))
                    {
                        if (string.Equals(requestStream.Current.Message, "qw!", StringComparison.OrdinalIgnoreCase))
                        {
                            break;
                        }
                        await _chatRoomService.BroadcastMessageAsync(requestStream.Current);
                    }
                }
            }
            catch (IOException)
            {
                _chatRoomService.DisconnectCustomer(requestStream.Current.RoomId, Guid.Parse(requestStream.Current.CustomerId));
                _logger.LogInformation($"Connection for {user} was aborted.");
            }
        }