1 /*
2  * Copyright 2009-2017 Alibaba Cloud All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 #include <fstream>
19 #include <mutex>
20 #include <alibabacloud/oss/OssError.h>
21 #include <alibabacloud/oss/OssRequest.h>
22 #include "../OssClientImpl.h"
23 
24 namespace AlibabaCloud
25 {
26 namespace OSS
27 {
28     class ResumableBaseWorker
29     {
30     public:
31         ResumableBaseWorker(uint64_t objectSize, uint64_t partSize);
32 
33     protected:
34         virtual int validate(OssError& err);
35         virtual void determinePartSize();
36         virtual void genRecordPath() = 0;
37         virtual int loadRecord() = 0;
38         virtual int prepare(OssError& err) = 0;
39         virtual int validateRecord() = 0;
40 
41         virtual bool hasRecordPath();
42         virtual void removeRecordFile();
43 
44         std::string  toString(const std::wstring& str);
45         std::wstring toWString(const std::string& str);
46 
47         bool hasRecord_;
48         std::string recordPath_;
49         std::wstring recordPathW_;
50         std::mutex lock_;
51         uint64_t objectSize_;
52         uint64_t consumedSize_;
53         uint64_t partSize_;
54     };
55 }
56 }