示例#1
0
        public async Task <int> SendMessageToGroup(Message message, int groupId)
        {
            var whoSent = await userService.GetUserById(userProvider.GetUserId(Context));

            await userService.MakeUserOnline(whoSent.Id, Context.ConnectionId);

            try
            {
                if (!await chatsService.ExistsInConversation(groupId, whoSent.Id))
                {
                    await SendError(Context.ConnectionId, "You must join this group to send messages.");

                    return(0);
                }

                if (await bansService.IsBannedFromConversation(groupId, whoSent.Id))
                {
                    await SendError(Context.ConnectionId, "You were banned in this group.");

                    return(0);
                }

                //we can't trust user on what's in user field

                message.User = whoSent.ToAppUserDto();

                MessageDataModel created;

                if (message.Type == MessageType.Attachment)
                {
                    created = await messagesService.AddAttachmentMessage(message, groupId, whoSent.Id);
                }
                else
                {
                    created = await messagesService.AddMessage(message, groupId, whoSent.Id);
                }

                message.TimeReceived = created.TimeReceived.ToUTCString();
                message.Id           = created.MessageID;
                message.State        = MessageState.Delivered;

                await SendMessageToGroupExcept(groupId, Context.ConnectionId, whoSent.Id, message);

                return(created.MessageID);
            }
            catch (Exception ex)
            {
                await SendError(Context.ConnectionId, ex.Message);

                logger.LogError(ex.Message);
                return(0);
            }
        }