Пример #1
0
        public async Task <ResponseDTO <bool> > UploadPartFileAsync(FilePartDTO filePart, Guid fileId)
        {
            var response = new ResponseDTO <bool>();
            var file     = await _context.Files.FirstOrDefaultAsync(f => f.Id == fileId);

            var path = Path.Combine(_path, fileId.ToString() + Path.GetExtension(file.Name));

            using (var fs = new FileStream(path, FileMode.Append))
            {
                fs.Write(filePart.Content, 0, filePart.Content.Length);
            }
            file.PartsUploaded++;
            await _context.SaveChangesAsync();

            var message = await _context.Messages.Include(m => m.Room).FirstOrDefaultAsync(m => m.Id == file.MessageId);

            var socketMessage = new FileStatusDTO {
                Id = fileId, MessageId = file.MessageId, PartsUploaded = file.PartsUploaded
            };
            var socketDTO = new SocketResponseDTO <FileStatusDTO> {
                Type = SocketMessageTypes.FileStatusChanged, Model = socketMessage
            };

            foreach (var p in message.Room.Participants.Select(p => p.UserId))
            {
                await _chatHandler.SendMessageByUserId(p, socketDTO);
            }
            return(response);
        }
Пример #2
0
        public async Task <ResponseDTO <FileDTO> > SendFileMessageAsync(FileMessageRequest request, Guid roomId, Guid userId)
        {
            var response = new ResponseDTO <FileDTO>();
            var room     = await _context.Rooms.FirstOrDefaultAsync(r => r.Id == roomId);

            if (room == null)
            {
                response.Error = new Error(404, "Room not found");
                return(response);
            }
            if (!room.Participants.Select(p => p.UserId).Contains(userId))
            {
                response.Error = new Error(409, "You can't send message here, because you are not participant");
                return(response);
            }

            var fileId  = Guid.NewGuid();
            var message = new MessageEntity()
            {
                Id          = Guid.NewGuid(),
                SenderId    = userId,
                RoomId      = roomId,
                Content     = fileId.ToString(),
                Type        = MessageTypes.File,
                SendingTime = DateTime.UtcNow
            };

            var file = new FileEntity()
            {
                Id        = fileId,
                MessageId = message.Id,

                Name     = request.Name,
                Size     = request.Size,
                PartSize = request.PartSize,
                Path     = request.Path,
                Parts    = request.Parts
            };

            await _context.Messages.AddAsync(message);

            await _context.Files.AddAsync(file);

            await _context.SaveChangesAsync();

            var socketDTO = new SocketResponseDTO <MessageDTO>
            {
                Type  = SocketMessageTypes.NewMessage,
                Model = new MessageDTO(message)
            };

            foreach (var participantId in room.Participants.Select(p => p.UserId))
            {
                await _chatHandler.SendMessageByUserId(participantId, socketDTO);
            }

            response.Data = new FileDTO(file);
            return(response);
        }