public MoleClientSenderTests(ClientFixture fixture) { PServSenderFromClientA = fixture.PServSenderFromClientA; PServSenderFromClientB = fixture.PServSenderFromClientB; SenderClientA = fixture.SenderToClientA; SenderClientB = fixture.SenderToClientB; CoreClientA = fixture.CoreClientAF; CoreClientB = fixture.CoreClientBF; }
public ClientFixture() { try { PushServerFixture.PrepareProtoBufSerrializer(); PrepareProtoBuf(); ServerListnerF = new PushServerListner(); var users = ServerListnerF.DbContext.Users.ToArray(); ServerListnerF.DbContext.RemoveRange(users); ServerListnerF.DbContext.SaveChanges(); while (ServerListnerF.CryptoFactories == null || ServerListnerF.PossibleCrypto == null) { } IPAddress[] localIPs = Dns.GetHostAddressesAsync(Dns.GetHostName()).Result; var ip = localIPs.First(address => address.AddressFamily == AddressFamily.InterNetwork); var rand = new Random(); var clientATupl = PushServerFixture.CreateForm("Frodo1", true, ip, rand); clientATupl.Item1.Accessibility = new AccessibilityInfo(100, 5); clientATupl.Item1.Accessibility.AddToConst("Frodo2"); CoreClientAF = new MoleClientCore(new ProtoBufSerializer(), @"C:\MoleFileSavingA", ServerListnerF.CryptoFactories, clientATupl.Item1, (ISign)clientATupl.Item3); var clientBTupl = PushServerFixture.CreateForm("Frodo2", true, ip, rand); clientBTupl.Item1.Accessibility = new AccessibilityInfo(100, 5); clientBTupl.Item1.Accessibility.AddToConst("Frodo1"); CoreClientBF = new MoleClientCore(new ProtoBufSerializer(), @"C:\MoleFileSavingB", ServerListnerF.CryptoFactories, clientBTupl.Item1, (ISign)clientBTupl.Item3); PServSenderFromClientA = new MolePushServerSender(ServerListnerF.CryptoFactories, ServerListnerF.PossibleCrypto); PServSenderFromClientA.InitializeConnectionAsync(ServerListnerF.EndPoint.Address, ServerListnerF.EndPoint.Port).Wait(); PServSenderFromClientA.RegisterNewUserAsync(CoreClientAF.MyUserForm).Wait(); PServSenderFromClientB = new MolePushServerSender(ServerListnerF.CryptoFactories, ServerListnerF.PossibleCrypto); PServSenderFromClientB.InitializeConnectionAsync(ServerListnerF.EndPoint.Address, ServerListnerF.EndPoint.Port).Wait(); PServSenderFromClientB.RegisterNewUserAsync(CoreClientBF.MyUserForm).Wait(); ListnerClientAF = new ClientListner(clientATupl, CoreClientAF.DirForFileSaving, PServSenderFromClientA, new IPEndPoint(ip, rand.Next(20000, 60000)), ServerListnerF.CryptoFactories, CoreClientAF); ListnerClientBF = new ClientListner(clientBTupl, CoreClientBF.DirForFileSaving, PServSenderFromClientB, new IPEndPoint(ip, rand.Next(20000, 60000)), ServerListnerF.CryptoFactories, CoreClientBF); SenderToClientA = new MoleClientSender(CoreClientAF.MyUserForm, ServerListnerF.PossibleCrypto, CoreClientBF); SenderToClientA.Inicialize(ListnerClientAF.EndPoint).Wait(); SenderToClientB = new MoleClientSender(CoreClientBF.MyUserForm, ServerListnerF.PossibleCrypto, CoreClientAF); SenderToClientB.Inicialize(ListnerClientBF.EndPoint).Wait(); //SetFuncOnEvents(CoreClientAF); } catch (Exception) { throw; } }
/// <exception cref="ArgumentNullException">sender == null.</exception> public RemoteFileStreamMole(MoleClientSender sender, string name, long length) : base(name, length) { if (sender == null) { throw new ArgumentNullException(nameof(sender)) { Source = GetType().AssemblyQualifiedName } } ; Sender = sender; }
/// <exception cref="ArgumentNullException">sender == null.</exception> public RemoteFileStreamMole(MoleClientSender sender, Stream streamForTempSaving, string name) : base(streamForTempSaving, name) { if (sender == null) { throw new ArgumentNullException(nameof(sender)) { Source = GetType().AssemblyQualifiedName } } ; Sender = sender; }
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); }