public static ChannelSummaryResponse ToChannelSummaryResponse(this Domain.Channel.Channel channel, bool isMuted, Domain.Message.Message lastReadMessage, MemberSummary creator, CloudStorageConfiguration configuration) { var channelListResponse = new ChannelSummaryResponse(); if (channel != null) { channelListResponse.Id = channel.Id; channelListResponse.IsClosed = channel.IsClosed; channelListResponse.Created = channel.Created; channelListResponse.Updated = channel.Updated; channelListResponse.Name = channel.Name; channelListResponse.Description = channel.Description; channelListResponse.WelcomeMessage = channel.WelcomeMessage; channelListResponse.Type = channel.Type; channelListResponse.IsMuted = isMuted; channelListResponse.CreatorId = channel.CreatorId ?? creator?.Id; channelListResponse.Creator = channel.Creator?.ToMemberSummary(configuration) ?? creator; channelListResponse.CreatorSaasUserId = channel.Creator?.SaasUserId ?? creator?.SaasUserId; channelListResponse.LastMessage = channel.Messages?.FirstOrDefault()?.ToMessageResponse(lastReadMessage, configuration); channelListResponse.UnreadMessagesCount = lastReadMessage != null?channel.Messages?.Count(x => x.Created > lastReadMessage.Created) ?? 0 : channel.Messages?.Count ?? 0; } return(channelListResponse); }
async Task IChannelNotificationHub.OnJoinChannel(MemberSummary member, ChannelSummaryResponse channel) { var clientIds = await GetChannelClientsAsync(new ChannelRequest(member.SaasUserId, channel.Id)); // Tell the people in this room that you've joined await Clients.Clients(clientIds).SendAsync(HubEvents.MemberJoined, member, channel); }
async Task IMessageNotificationHub.OnDeleteMessageAttachment(MemberSummary member, MessageResponse message) { var channel = await _channelService.GetChannelByIdAsync(new ChannelRequest(member.SaasUserId, message.ChannelId)); var clientIds = await GetChannelClientsAsync(new ChannelRequest(member.SaasUserId, channel.Id)); // Notify all clients for the uploaded message await Clients.Clients(clientIds).SendAsync(HubEvents.AttachmentDeleted, channel.Name); }
async Task IMessageNotificationHub.OnDeleteMessage(MemberSummary member, MessageResponse message) { var channelSummary = await _channelService.GetChannelSummaryAsync(new ChannelRequest(member.SaasUserId, message.ChannelId)); var clientIds = await GetChannelClientsAsync(new ChannelRequest(member.SaasUserId, channelSummary.Id)); // Notify all clients for the deleted message await Clients.Clients(clientIds).SendAsync(HubEvents.MessageDeleted, message.Id, channelSummary); }
async Task IMessageNotificationHub.OnAddMessage(MemberSummary member, MessageResponse message, string clientConnectionId) { var getChannelClientsExceptCallerRequest = new ChannelRequest(member.SaasUserId, message.ChannelId); var clientIds = await GetChannelClientsExceptCallerAsync(getChannelClientsExceptCallerRequest, clientConnectionId); // Notify all clients for the uploaded message await Clients.Clients(clientIds).SendAsync(HubEvents.MessageAdded, message); }
async Task IChannelNotificationHub.OnLeaveChannel(MemberSummary member, ChannelSummaryResponse channel) { var clientIds = await GetChannelClientsAsync(new ChannelRequest(member.SaasUserId, channel.Id)); var senderClients = await _memberService.GetMemberClientsAsync(member.Id); clientIds.AddRange(senderClients.Select(x => x.ClientConnectionId)); // Tell the people in this room that you've leaved await Clients.Clients(clientIds).SendAsync(HubEvents.MemberLeft, member, channel?.Id); }
async Task IChannelNotificationHub.OnAddChannel(MemberSummary member, ChannelSummaryResponse channel, string clientConnectionId) { var getClientsExceptCallerRequest = new ChannelRequest(member.SaasUserId, channel.Id) { ClientConnectionId = clientConnectionId }; var clientIds = await GetChannelClientsExceptCallerAsync(getClientsExceptCallerRequest, clientConnectionId); // Tell the people in this room that you've joined await Clients.Clients(clientIds).SendAsync(HubEvents.ChannelCreated, channel); }
public static MemberSummary ToMemberSummary(this Domain.Member.Member member, CloudStorageConfiguration configuration) { var summary = new MemberSummary(); if (member != null) { summary.Id = member.Id; summary.SaasUserId = member.SaasUserId; summary.UserName = member.Name; summary.Status = member.Status; summary.Role = member.Role; summary.IsAfk = member.IsAfk; summary.Email = member.Email; summary.LastActivity = member.LastActivity; summary.AvatarUrl = member.PhotoName != null ? $"{configuration.ContentStorageHost}/{configuration.MemberAvatarsContainer}/{member.PhotoName}" : null; } return(summary); }