public Uploader(ConnectionConfig connectionConfig)
 {
     CreateProximaxDataService           = new CreateProximaxDataService(connectionConfig.FileStorageConnection);
     CreateProximaxMessagePayloadService = new CreateProximaxMessagePayloadService();
     BlockchainTransactionService        =
         new BlockchainTransactionService(connectionConfig.BlockchainNetworkConnection);
 }
 internal Uploader(BlockchainTransactionService blockchainTransactionService,
                   CreateProximaxDataService proximaxDataService,
                   CreateProximaxMessagePayloadService proximaxMessagePayloadService)
 {
     BlockchainTransactionService        = blockchainTransactionService;
     CreateProximaxDataService           = proximaxDataService;
     CreateProximaxMessagePayloadService = proximaxMessagePayloadService;
 }
 private IObservable <UploadResult> DoUpload(UploadParameter uploadParam)
 {
     try
     {
         var uploadResult = CreateProximaxDataService.CreateData(uploadParam).SelectMany(uploadedData =>
                                                                                         CreateProximaxMessagePayloadService.CreateMessagePayload(uploadParam, uploadedData)
                                                                                         .SelectMany(messagePayload =>
                                                                                                     CreateAndAnnounceTransaction(uploadParam, messagePayload)
                                                                                                     .Select(transactionHash =>
                                                                                                             CreateUploadResult(messagePayload, transactionHash)))).Wait();
         return(Observable.Return(uploadResult));
     }
     catch (Exception ex)
     {
         return(Observable.Throw <UploadResult>(new UploadFailureException("Upload failed.", ex)));
     }
 }