private void Connected() { Receive <ListDirectory>((cmd) => { StopIdlePeriod(); IEnumerable <SftpFileInfo> result = null; try { result = _connection.ListDirectory(cmd.RemotePath, null); } catch (Exception) { result = new SftpFileInfo[] { }; } this.Sender.Tell(result, Self); StartIdlePeriod(); }); Receive <ReceiveTimeout>((cmd) => { if (DateTimeOffset.Now - _idleFromTime > TimeSpan.FromSeconds(ConnectionTimeoutInSeconds)) { StopIdlePeriod(); _connection.Disconnect(); _connection.Dispose(); Become(Disconnected); } }); }
private void Connected() { Receive <ListDirectory>((cmd) => { StopIdlePeriod(); IEnumerable <SftpFileInfo> result = null; try { result = _connection.ListDirectory(cmd.RemotePath, null); } catch (Exception) { result = new SftpFileInfo[] { }; } this.Sender.Tell(result, Self); StartIdlePeriod(); }); Receive <UploadFile>((cmd) => { StopIdlePeriod(); Utils.EnsureParentDirectoryExists(_connection, cmd.RemotePath); using (var stream = _fileStreamProvider.OpenRead(cmd.LocalPath)) { _connection.UploadFile(stream, cmd.RemotePath, null); } StartIdlePeriod(); }); Receive <DownloadFile>((cmd) => { StopIdlePeriod(); using (var stream = _fileStreamProvider.OpenWrite(cmd.LocalPath)) { _connection.DownloadFile(cmd.RemotePath, stream, null); } StartIdlePeriod(); }); Receive <ReceiveTimeout>((cmd) => { if (DateTimeOffset.Now - _idleFromTime > TimeSpan.FromSeconds(ConnectionTimeoutInSeconds)) { StopIdlePeriod(); _connection.Disconnect(); _connection.Dispose(); Become(Disconnected); } }); }
private void Connected() { Receive <Disconnect>((cmd) => { _connection.Disconnect(); _connection.Dispose(); Become(Disconnected); }); }
private void Connected() { Receive <ListDirectory>((cmd) => { IEnumerable <SftpFileInfo> result = null; try { result = _connection.ListDirectory(cmd.RemotePath, null); } catch (Exception) { result = new SftpFileInfo[] { }; } this.Sender.Tell(result); }); Receive <Disconnect>((cmd) => { _connection.Disconnect(); _connection.Dispose(); Become(Disconnected); }); }
private void Connected() { Receive <ListDirectory>((cmd) => { StopIdlePeriod(); IEnumerable <SftpFileInfo> result = null; try { result = _connection.ListDirectory(cmd.RemotePath, null); } catch (Exception) { result = new SftpFileInfo[] { }; } this.Sender.Tell(result, Self); StartIdlePeriod(); }); Receive <UploadFile>((cmd) => { StopIdlePeriod(); AsyncCallback callback = ar => { try { _connection.EndUploadFile(ar); var result = _clientFactory.CreateSftpAsyncResult(ar); if (result.IsCanceled) { this.Self.Tell(new Cancelled()); } else { this.Self.Tell(new Completed()); } } catch (Exception ex) { this.Self.Tell(new Error(ex.Message)); } }; Utils.EnsureParentDirectoryExists(_connection, cmd.RemotePath); _stream = _fileStreamProvider.OpenRead(cmd.LocalPath); _asyncResult = _connection.BeginUploadFile(_stream, cmd.RemotePath, callback, null); Become(Transferring); }); Receive <DownloadFile>((cmd) => { StopIdlePeriod(); AsyncCallback callback = ar => { try { _connection.EndDownloadFile(ar); var result = _clientFactory.CreateSftpAsyncResult(ar); if (result.IsCanceled) { this.Self.Tell(new Cancelled()); } else { this.Self.Tell(new Completed()); } } catch (Exception ex) { this.Self.Tell(new Error(ex.Message)); } }; _stream = _fileStreamProvider.OpenWrite(cmd.LocalPath); _asyncResult = _connection.BeginDownloadFile(cmd.RemotePath, _stream, callback, null); Become(Transferring); }); Receive <ReceiveTimeout>((cmd) => { if (DateTimeOffset.Now - _idleFromTime > TimeSpan.FromSeconds(ConnectionTimeoutInSeconds)) { StopIdlePeriod(); _connection.Disconnect(); _connection.Dispose(); Become(Disconnected); } }); }
/// <summary> /// /// </summary> /// <param name="writeMode"></param> /// <returns></returns> public override bool Put(DeliveryWriteMode writeMode) { if (SaveFileCopy) { string filename = Path.Combine(Context.BaseDirectory, string.Format("SftpDeliveryFile-{0:yyyyMMdd-HHmmss}.csv", DateTime.Now)); _log.Info(m => m("Saving copy of SFTP upload file to '{0}'", filename)); Source.ToFile(filename, Source.Length); } _log.Trace(m => m("Beginning SFTP communication.")); using (Stream dataStream = new MemoryStream(Source)) { _log.Trace(m => m("Getting SFTP client object...")); _sftp = GetClient(); using (_sftp) { try { _log.Debug(m => m("Connecting to SFTP server ({0}@{1})...", Username, Hostname)); _sftp.Connect(); _log.Trace(m => m("Does file exist at destination (and Overwrite is disabled)?")); if (DeliveryWriteMode.Overwrite != writeMode && _sftp.Exists(Destination)) { if (DeliveryWriteMode.Exception == writeMode) { _log.Info(m => m("Destination file exists and Overwrite flag has not been specified: '{0}'", Destination)); throw new SftpPermissionDeniedException("File already exists and Overwrite is not enabled."); } // DeliverWriteMode.Ignore _log.Info(m => m("Destination file exists and flag is set to Ignore. Skipping.\n{0}", Destination)); return false; } _log.Info(m => m("Uploading file via SFTP ({0}@{1}:{2}) WriteMode: '{3}'", Username, Hostname, Destination, writeMode.ToString("F"))); _sftp.UploadFile(dataStream, Destination, (DeliveryWriteMode.Overwrite == writeMode)); // if nothing blew up we succeeded (?) return true; } catch (SshConnectionException ex) { _log.Warn(m => m("Unable to establish an SFTP connection to '{0}@{1}'\n{2}", Username, Hostname, ex)); throw; } catch(SftpPermissionDeniedException ex) { _log.Warn(m => m("Failed to upload file to '{0}@{1}:{2}'\n{3}", Username, Hostname, Destination, ex)); throw; } catch(SshException ex) { _log.Warn(m => m("SSH server returned the following error '{0}'\n{1}", ex.Message, ex)); throw; } finally { _log.Debug(m => m("Disconnecting from SFTP server...")); if (_sftp != null && _sftp.IsConnected) { _sftp.Disconnect(); } } } } return false; }