160 lines
4.8 KiB
C#
160 lines
4.8 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Text;
|
|||
|
|
using COSXML.Model;
|
|||
|
|
using COSXML.Model.Object;
|
|||
|
|
using COSXML.CosException;
|
|||
|
|
/**
|
|||
|
|
* Copyright (c) 2018 Tencent Cloud. All rights reserved.
|
|||
|
|
* 11/29/2018 5:08:32 PM
|
|||
|
|
* bradyxiao
|
|||
|
|
*/
|
|||
|
|
namespace COSXML.Transfer
|
|||
|
|
{
|
|||
|
|
public abstract class COSXMLTask
|
|||
|
|
{
|
|||
|
|
public COSXML.Callback.OnProgressCallback progressCallback;
|
|||
|
|
|
|||
|
|
public COSXML.Callback.OnSuccessCallback<CosResult> successCallback;
|
|||
|
|
|
|||
|
|
public COSXML.Callback.OnFailedCallback failCallback;
|
|||
|
|
|
|||
|
|
public OnInternalHandleBeforExcute onInternalHandle;
|
|||
|
|
|
|||
|
|
public OnState onState;
|
|||
|
|
|
|||
|
|
protected CosXml cosXmlServer;
|
|||
|
|
|
|||
|
|
protected string bucket;
|
|||
|
|
|
|||
|
|
protected string region;
|
|||
|
|
|
|||
|
|
protected string key;
|
|||
|
|
|
|||
|
|
protected bool isNeedMd5 = true;
|
|||
|
|
|
|||
|
|
protected TaskState taskState;
|
|||
|
|
protected Object syncTaskState = new Object();
|
|||
|
|
|
|||
|
|
public void InitCosXmlServer(CosXml cosXml)
|
|||
|
|
{
|
|||
|
|
cosXmlServer = cosXml;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public COSXMLTask(string bucket, string region, string key)
|
|||
|
|
{
|
|||
|
|
this.bucket = bucket;
|
|||
|
|
this.region = region;
|
|||
|
|
this.key = key;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public abstract void Pause();
|
|||
|
|
|
|||
|
|
public abstract void Cancel();
|
|||
|
|
|
|||
|
|
public abstract void Resume();
|
|||
|
|
|
|||
|
|
protected bool UpdateTaskState(TaskState newTaskState)
|
|||
|
|
{
|
|||
|
|
bool result = false;
|
|||
|
|
lock (syncTaskState)
|
|||
|
|
{
|
|||
|
|
switch (newTaskState)
|
|||
|
|
{
|
|||
|
|
case TaskState.WAITTING:
|
|||
|
|
taskState = newTaskState;
|
|||
|
|
if (onState != null) onState(taskState);
|
|||
|
|
result = true;
|
|||
|
|
break;
|
|||
|
|
case TaskState.RUNNING:
|
|||
|
|
if (taskState == TaskState.WAITTING)
|
|||
|
|
{
|
|||
|
|
taskState = newTaskState;
|
|||
|
|
if (onState != null) onState(taskState);
|
|||
|
|
result = true;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case TaskState.COMPLETED:
|
|||
|
|
if (taskState == TaskState.RUNNING)
|
|||
|
|
{
|
|||
|
|
taskState = newTaskState;
|
|||
|
|
if (onState != null) onState(taskState);
|
|||
|
|
result = true;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case TaskState.FAILED:
|
|||
|
|
if (taskState == TaskState.WAITTING || taskState == TaskState.RUNNING)
|
|||
|
|
{
|
|||
|
|
taskState = newTaskState;
|
|||
|
|
if (onState != null) onState(taskState);
|
|||
|
|
result = true;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case TaskState.PAUSE:
|
|||
|
|
if (taskState == TaskState.WAITTING || taskState == TaskState.RUNNING)
|
|||
|
|
{
|
|||
|
|
taskState = newTaskState;
|
|||
|
|
if (onState != null) onState(taskState);
|
|||
|
|
result = true;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case TaskState.CANCEL:
|
|||
|
|
if (taskState != TaskState.COMPLETED || taskState != TaskState.CANCEL)
|
|||
|
|
{
|
|||
|
|
taskState = newTaskState;
|
|||
|
|
if (onState != null) onState(taskState);
|
|||
|
|
result = true;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case TaskState.RESUME:
|
|||
|
|
if (taskState == TaskState.PAUSE || taskState == TaskState.FAILED)
|
|||
|
|
{
|
|||
|
|
taskState = newTaskState;
|
|||
|
|
if (onState != null) onState(taskState);
|
|||
|
|
result = true;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return result;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
internal class SliceStruct
|
|||
|
|
{
|
|||
|
|
public int partNumber;
|
|||
|
|
public bool isAlreadyUpload;
|
|||
|
|
public long sliceStart;
|
|||
|
|
public long sliceEnd;
|
|||
|
|
public long sliceLength;
|
|||
|
|
public string eTag;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public enum TaskState
|
|||
|
|
{
|
|||
|
|
WAITTING = 0,
|
|||
|
|
RUNNING,
|
|||
|
|
COMPLETED,
|
|||
|
|
FAILED,
|
|||
|
|
CANCEL,
|
|||
|
|
PAUSE,
|
|||
|
|
RESUME,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public delegate void OnState(TaskState taskState);
|
|||
|
|
|
|||
|
|
public delegate void OnInternalHandleBeforExcute(CosRequest cosRequest);
|
|||
|
|
|
|||
|
|
internal interface OnMultipartUploadStateListener
|
|||
|
|
{
|
|||
|
|
void OnInit();
|
|||
|
|
void OnPart();
|
|||
|
|
void OnCompleted(CompleteMultipartUploadResult result);
|
|||
|
|
void OnFailed(CosClientException clientEx, CosServerException serverEx);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|