using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ScheduleWork;
using NshowAdClient.Services;
using NshowAdClient.Helper;
using NewTempo.Ftp;
using NshowAdClient.AdExceptions;
using System.Net;
namespace NshowAdClient.AdScheduleWork
{
public abstract class FtpScheduleWork : ScheduleWorkBase
{
/// <summary>
/// Ftp上的文件路径
/// </summary>
public string FtpFile { get; private set; }
/// <summary>
/// 操作FTP的实例对象
/// </summary>
public MyFtp MyFtp { get; private set; }
public FtpScheduleWork(string ftpFile, MyFtp myftp)
{
this.FtpFile = ftpFile;
this.MyFtp = myftp;
}
protected override object RunWorking()
{
FtpMethodHandle();
return null;
}
public override void Rollback()
{
base.Rollback();
// 完成没有失败的情况下回滚
if (IsCompleted && !IsFailed)
{
try
{
FtpMethodRoolback();
}
catch (Exception ex)
{
Logger.Instance.Debug(ex.Message);
}
}
}
protected abstract void FtpMethodHandle();
protected virtual void FtpMethodRoolback() { }
}
public class FtpUploadScheduleWork : FtpScheduleWork
{
/// <summary>
/// 本地文件路径
/// </summary>
public string LocalFile { get; private set; }
public int Percent { get; set; }
/// <param name="ftp">Ftp上的文件路径</param>
/// <param name="local">本地文件路径</param>
public FtpUploadScheduleWork(string ftpFile, string local, MyFtp myFtp)
: base(ftpFile, myFtp)
{
this.LocalFile = local;
}
protected override void FtpMethodHandle()
{
FtpHelpService.CreateDir(FtpFile, MyFtp);
//修改上传方式
bool ulRet = MyFtp.Upload(FtpFile, LocalFile);
if (ulRet == false)
{
throw new FtpUploadException(FtpFile, LocalFile);
}
}
protected override void FtpMethodRoolback()
{
this.MyFtp.Delete(this.FtpFile);
}
}
public class FtpDeleteScheduleWork : FtpScheduleWork
{
public FtpDeleteScheduleWork(string ftpFile, MyFtp myFtp)
: base(ftpFile, myFtp)
{
}
protected override void FtpMethodHandle()
{
MyFtp.Delete(FtpFile);
}
}
public class FtpDownloadScheduleWork : FtpScheduleWork
{
/// <summary>
/// 本地文件路径
/// </summary>
public string LocalFile { get; private set; }
public FtpDownloadScheduleWork(string ftpFile, string localFile, MyFtp myFtp)
: base(ftpFile, myFtp)
{
this.LocalFile = localFile;
}
protected override void FtpMethodHandle()
{
bool dlRet = MyFtp.Download(this.FtpFile, this.LocalFile);
if (dlRet == false)
throw new FtpDownloadException(this.FtpFile, this.LocalFile);
}
}
}