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);
                }
            });
        }
예제 #2
0
        /// <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;
            }
        }