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); } }); }
/// <summary> /// /// </summary> /// <param name="caminho"></param> /// <param name="destino"></param> /// <returns></returns> public async Task Download(string caminho, string destino) { try { using (var stream = new FileStream(caminho, FileMode.Open)) { await Task.Run(() => _sftpClient.DownloadFile(destino, stream)); } return; } catch (Exception ex) { throw ex; } }