#include "TosClientV2.h"
using namespace VolcengineTos;
static void ProgressCallback(std::shared_ptr<DataTransferStatus> datatransferstatus) {
int64_t consumedBytes = datatransferstatus->consumedBytes_;
int64_t totalBytes = datatransferstatus->totalBytes_;
int64_t rwOnceBytes = datatransferstatus->rwOnceBytes_;
DataTransferType type = datatransferstatus->type_;
int64_t rate = 100 * consumedBytes / totalBytes;
std::cout << "rate:" << rate << ","
<< "ConsumedBytes:" << consumedBytes << ","
<< "totalBytes:" << totalBytes << ","
<< "rwOnceBytes:" << rwOnceBytes << ","
<< "DataTransferType:" << type << std::endl;
std::string region = "Your Region";
std::string accessKey = std::getenv("TOS_ACCESS_KEY");
std::string secretKey = std::getenv("TOS_SECRET_KEY");
std::string bucketName = "examplebucket";
std::string objectName = "exampledir/exampleobject.txt";
TosClientV2 client(region, accessKey, secretKey);
auto part0 = std::make_shared<std::stringstream>();
for (int i = 0; i < (128 << 10); ++i) {
AppendObjectV2Input input(bucketName, objectName, part0, 0);
DataTransferListener datatransferlistener = {ProgressCallback, nullptr};
input.setDataTransferListener(datatransferlistener);
auto output = client.appendObject(input);
if (!output.isSuccess()) {
std::cout << "AppendObject failed." << output.error().String() << std::endl;
std::cout << "AppendObject success." << std::endl;
std::cout << "Next Append Offset is: " << output.result().getNextAppendOffset() << std::endl;
std::cout << "Pre HashCrc64Ecma is: " << output.result().getHashCrc64ecma() << std::endl;
auto part1 = std::make_shared<std::stringstream>();
for (int i = 0; i < (256 << 10); ++i) {
input.setContent(part1);
input.setOffset(output.result().getNextAppendOffset());
input.setPreHashCrc64Ecma(output.result().getHashCrc64ecma());
auto output1 = client.appendObject(input);
if (!output.isSuccess()) {
std::cout << "AppendObject failed." << output.error().String() << std::endl;
std::cout << "AppendObject success." << std::endl;
std::cout << "Next Append Offset is: " << output1.result().getNextAppendOffset() << std::endl;
std::cout << "Pre HashCrc64Ecma is: " << output1.result().getHashCrc64ecma() << std::endl;