Ejemplo n.º 1
0
        private async Task SendFile()
        {
            if (SelectedMyRoom == null)
            {
                ShowNotification("Room not selected");
                return;
            }
            var dialog = new OpenFileDialog();

            dialog.ShowDialog();

            if (string.IsNullOrEmpty(dialog.FileName))
            {
                return;
            }
            var request = new FileMessageRequest {
                Name = dialog.SafeFileName, Path = dialog.FileName
            };
            var thread = new Thread(new ParameterizedThreadStart(param =>
            {
                _fileManager.Upload(request, SelectedMyRoom.Id);
            }));

            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
        }
Ejemplo n.º 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);
        }
Ejemplo n.º 3
0
        public async void Upload(FileMessageRequest file, Guid roomId)
        {
            file.Size     = File.OpenRead(file.Path).Length;
            file.PartSize = BufferSize;
            file.Parts    = (int)Math.Ceiling(file.Size / (double)BufferSize);

            var response = await _httpManager.PostAsync <FileDTO>($"api/Rooms/{roomId.ToString()}/FileMessages", file);

            if (response.Error != null)
            {
                Failed?.Invoke(response.Error.ErrorDescription);
                return;
            }

            var position = 0;
            var part     = 1;

            while (position < file.Size)
            {
                byte[] buffer;
                if (position + BufferSize > file.Size)
                {
                    buffer = new byte[(int)file.Size - position];
                }
                else
                {
                    buffer = new byte[BufferSize];
                }

                using (BinaryReader reader = new BinaryReader(new FileStream(file.Path, FileMode.Open, FileAccess.Read)))
                {
                    reader.BaseStream.Seek(position, SeekOrigin.Begin);
                    if (position + BufferSize > file.Size)
                    {
                        reader.Read(buffer, 0, (int)file.Size - position);
                    }
                    else
                    {
                        reader.Read(buffer, 0, BufferSize);
                    }
                }

                var request = new FilePartDTO
                {
                    Content    = buffer,
                    PartNumber = part
                };

                var resp = await _httpManager.PostAsync <bool>($"api/Files/{response.Data.Id}", request);

                if (resp.Error != null)
                {
                    Failed?.Invoke(resp.Error.ErrorDescription);
                    return;
                }

                position += BufferSize;
            }
        }
        public override void Test_ToJson()
        {
            var msg = new FileMessageRequest();

            msg.MediaId = "3a8asd892asd8asd";

            OutputJson(msg);
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> SendFileMessage([FromRoute] Guid id, [FromBody] FileMessageRequest request)
        {
            var response = await _messageManager.SendFileMessageAsync(request, id, GetUserId());

            if (response.Error != null)
            {
                return(StatusCode(response.Error.ErrorCode, response));
            }

            return(Ok(response));
        }
Ejemplo n.º 6
0
        public async Task Test_UploadFileAsync()
        {
            var fileUrl = Path.Combine(CurrentDir, "Resources", "T1.png");
            var resp    = await Provider.UploadAsync(AppId, fileUrl);

            OutputResponse(resp);

            var msg = new FileMessageRequest();

            msg.MediaId = resp.MediaId;

            OutputRequest(msg);
            var sendResp = await Provider.SendAsync(AppId, msg);

            OutputResponse(sendResp);
        }