private async Task <FileReceiveReq> CreateFileReceiveReq(FileReqMeta fileRequest, Metadata mMetadata) { //open stream for all files being received List <FileTransReq> fileTrans = new List <FileTransReq>(); foreach (FileMeta file in fileRequest.Files) { FileTransReq fileTran = await SetupTransmitionForNewFile(file, fileRequest.BufferSize); fileTrans.Add(fileTran); } FileReceiveReq fileReceivedReq = new FileReceiveReq(fileTrans, mMetadata.SourceIp); return(fileReceivedReq); }
//called when a file part is received private async Task ProcessFilePart(FilePartObj filePart, Metadata metadata) { //check if file part is valid if (filePart == null) { throw new Exception("filePart has not been set."); } //find file recieve request FileReceiveReq fileReceived = GetReceivedFileReqFromMeta(metadata); FileTransReq fileTrans = fileReceived.GetFileTransReqFromFileMeta(filePart.FileMetadata); //dump file data to disk await fileReceived.WriteFilePartToFile(filePart); //log incoming file FileProgUpdate?.Invoke(this, new FileTransferEventArgs(fileTrans, TransDirrection.receiving)); }
private async Task ProcessIncomingFilesRequest(FileReqMeta fileRequest, Metadata mMetadata) { //determine whether or not to accept the incoming file request bool validFileRequest = IsValidFileRequest(fileRequest, mMetadata); FileReceiveReq fileReceiveReq = null; if (validFileRequest) { //add to a file recieved request fileReceiveReq = await CreateFileReceiveReq(fileRequest, mMetadata); receivedFileRequests.Add(fileReceiveReq); } //send message back to sender ReqAck fileRequestResp = new ReqAck(validFileRequest); await ObjectManager.SendAsyncTCP(mMetadata.SourceIp, fileRequestResp); }