public void CanHandlerDownloadChunk() { var guid = CorrelationId.GenerateCorrelationId(); var request = new TransferFileBytesRequest { ChunkBytes = ByteString.Empty, ChunkId = 1, CorrelationFileName = CorrelationId.GenerateCorrelationId().Id.ToByteString() }.ToProtocolMessage(PeerIdHelper.GetPeerId("Test"), guid); _downloadFileTransferFactory.DownloadChunk(Arg.Any <TransferFileBytesRequest>()) .Returns(FileTransferResponseCodeTypes.Successful); request.SendToHandler(_context, _observer); _downloadFileTransferFactory.Received(1).DownloadChunk(Arg.Any <TransferFileBytesRequest>()); }
/// <inheritdoc /> public FileTransferResponseCodeTypes DownloadChunk(TransferFileBytesRequest transferFileBytesRequest) { FileTransferResponseCodeTypes responseCodeType; try { var fileTransferCorrelationId = new CorrelationId(transferFileBytesRequest.CorrelationFileName.ToByteArray()); responseCodeType = DownloadChunkResponse(fileTransferCorrelationId, transferFileBytesRequest.ChunkId, transferFileBytesRequest.ChunkBytes.ToByteArray()); } catch (Exception e) { Logger.Error(e, "Failed to handle TransferFileBytesRequestHandler after receiving message {0}", transferFileBytesRequest); responseCodeType = FileTransferResponseCodeTypes.Error; } return(responseCodeType); }
/// <inheritdoc /> public IMessageDto <ProtocolMessage> GetUploadMessageDto(uint index) { var chunkId = index + 1; var startPos = index * Constants.FileTransferChunkSize; var endPos = chunkId * Constants.FileTransferChunkSize; var fileLen = RandomAccessStream.Length; if (endPos > fileLen) { endPos = (uint)fileLen; } var bufferSize = (int)(endPos - startPos); var chunk = new byte[bufferSize]; RandomAccessStream.Seek(startPos, SeekOrigin.Begin); var readTries = 0; var bytesRead = 0; while ((bytesRead += RandomAccessStream.Read(chunk, 0, bufferSize - bytesRead)) < bufferSize) { readTries++; if (readTries >= Constants.FileTransferMaxChunkReadTries) { return(null); } } var transferMessage = new TransferFileBytesRequest { ChunkBytes = ByteString.CopyFrom(chunk), ChunkId = chunkId, CorrelationFileName = CorrelationId.Id.ToByteString() }.ToProtocolMessage(PeerId); return(new MessageDto(transferMessage, RecipientId )); }