public void SendFileTest(string path) { if (!SenderClientA.IsRegistered) { RegisterTest(); } if (SenderClientA.SymmetricEncrypter == null) { GetSessionKeyTest(); } var fileInfo = new FileInfo(path); if (CoreClientB.FilesSending.ContainsKey(fileInfo.Name)) { return; } if (SenderClientB.SymmetricEncrypter == null) { if (SenderClientB.AsymmetricEncrypter == null) { SenderClientB.AuthenticateAsync().Wait(); SenderClientB.GetPublicKeyAsync().Wait(); SenderClientB.SetPublicKey().Wait(); //SenderClientB.GetPublicKeyAsync().Wait(); //SenderClientB.SetPublicKey().Wait(); } SenderClientB.GetSessionKey().Wait(); } if (!SenderClientB.IsAuth) { SenderClientB.AuthenticateAsync().Wait(); } if (!SenderClientB.IsRegistered) { SenderClientB.RegisterAsync().Wait(); } var remoteFileStream = new RemoteFileStreamMole(SenderClientA, fileInfo.Name, fileInfo.Length); remoteFileStream.InitializeAsync().Wait(); Func <object, RecieveOfFileTransferRequestEventArgs, Task> func = (o, args) => { args.AllowContinueRegistration(true, remoteFileStream); return(Task.CompletedTask); }; CoreClientB.RecieveOfFileTransferRequestEvent += func; SenderClientB.SendFileRecieveRequest(fileInfo).Wait(); using (var fileStream = new FileStream(@"C:\MoleFileSavingB\" + fileInfo.Name, FileMode.Create, FileAccess.ReadWrite, FileShare.Read)) { remoteFileStream.CopyToAsync(fileStream).Wait(); } }
public override async Task <bool> RecieveOfFileTransferRequest(FileRecieveRequest request, IPEndPoint endPoint, ContactForm contact, ResultOfOperation result) { var args = new RecieveOfFileTransferRequestEventArgs() { FileName = request.Name, Login = contact.Login, Ip = endPoint.Address, Length = request.Length }; await OnFileReciveBegining(args).ConfigureAwait(false); var remoteFile = args.RemoteFileStream; if (args.IsAllow) { if (remoteFile == null) { var dirFull = DirForFileSaving + @"\" + request.Name; var stream = new FileStream(dirFull, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); await Task.Run(() => stream.SetLength(request.Length)).ConfigureAwait(false); MoleClientSender sender; if (!Senders.TryGetValue(contact.Login, out sender)) { sender = new MoleClientSender(contact, PossibleAlgs, this, true); Senders.TryAdd(contact.Login, sender); } await sender.Inicialize(endPoint).ConfigureAwait(false); await sender.GetSessionKey().ConfigureAwait(false); await sender.AuthenticateAsync().ConfigureAwait(false); remoteFile = new RemoteFileStreamMole(sender, stream, request.Name); await remoteFile.InitializeAsync().ConfigureAwait(false); } await OnFileRecievingPrepared(new FileRecievingPreparedEventArgs(request.Name, request.Length, remoteFile)) .ConfigureAwait(false); result.OperationWasFinishedSuccessful = true; return(true); } result.ErrorMessage = "Пользователь отказался принять файл."; result.OperationWasFinishedSuccessful = false; return(false); }