/// <summary>
 /// Constructed to send one or more files to a remove server identified by serverKey.  The transfer
 /// is a blocking call and returns on success or raises an exception.  If Abort() is called durring
 /// the transfer, or if a ProgressChanged event handler raises the OperationCanceledException, the
 /// transfer is silently terminated.
 /// </summary>
 /// <param name="privateKey">The private key for this client</param>
 /// <param name="serverKey">The public key of the server</param>
 /// <param name="sendMessage">A delegate to transfer data to the server and obtain a response</param>
 public Client(RSAPrivateKey privateKey, RSAPublicKey serverKey, TransmitMessageAction sendMessage)
 {
     _privateKey  = Check.NotNull(privateKey);
     _publicKey   = Check.NotNull(serverKey);
     _sendMessage = Check.NotNull(sendMessage);
     _abort       = new ManualResetEvent(false);
     LimitThreads = 10;
 }
 /// <summary>
 /// Constructed to send one or more files to a remove server identified by serverKey.  The transfer
 /// is a blocking call and returns on success or raises an exception.  If Abort() is called durring
 /// the transfer, or if a ProgressChanged event handler raises the OperationCanceledException, the
 /// transfer is silently terminated.
 /// </summary>
 /// <param name="privateKey">The private key for this client</param>
 /// <param name="serverKey">The public key of the server</param>
 /// <param name="sendMessage">A delegate to transfer data to the server and obtain a response</param>
 public Client(RSAPrivateKey privateKey, RSAPublicKey serverKey, TransmitMessageAction sendMessage)
 {
     _privateKey = Check.NotNull(privateKey);
     _publicKey = Check.NotNull(serverKey);
     _sendMessage = Check.NotNull(sendMessage);
     _abort = new ManualResetEvent(false);
     LimitThreads = 10;
 }