Files
featherVoice/Pods/QCloudCOSXML/QCloudCOSXML/Classes/Transfer/QCloudCOSTransferMangerService.m
2025-10-24 10:52:40 +08:00

159 lines
9.0 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// COSTransferManger.m
// COSTransferManger
//
// Created by tencent
// Copyright (c) 2015年 tencent. All rights reserved.
//
// ██████╗ ██████╗██╗ ██████╗ ██╗ ██╗██████╗ ████████╗███████╗██████╗ ███╗ ███╗██╗███╗ ██╗ █████╗ ██╗ ██╗ █████╗
// ██████╗
// ██╔═══██╗██╔════╝██║ ██╔═══██╗██║ ██║██╔══██╗ ╚══██╔══╝██╔════╝██╔══██╗████╗ ████║██║████╗ ██║██╔══██╗██║ ██║ ██╔══██╗██╔══██╗
// ██║ ██║██║ ██║ ██║ ██║██║ ██║██║ ██║ ██║ █████╗ ██████╔╝██╔████╔██║██║██╔██╗ ██║███████║██║ ██║ ███████║██████╔╝
// ██║▄▄ ██║██║ ██║ ██║ ██║██║ ██║██║ ██║ ██║ ██╔══╝ ██╔══██╗██║╚██╔╝██║██║██║╚██╗██║██╔══██║██║ ██║ ██╔══██║██╔══██╗
// ╚██████╔╝╚██████╗███████╗╚██████╔╝╚██████╔╝██████╔╝ ██║ ███████╗██║ ██║██║ ╚═╝ ██║██║██║ ╚████║██║ ██║███████╗ ███████╗██║
// ██║██████╔╝
// ╚══▀▀═╝ ╚═════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚══════╝ ╚══════╝╚═╝ ╚═╝╚═════╝
//
//
// _ __ _ _
// (_) / _| | | | |
// ___ ___ _ ____ ___ ___ ___ | |_ ___ _ __ __| | _____ _____| | ___ _ __ ___ _
// __ ___
// / __|/ _ \ '__\ \ / / |/ __/ _ \ | _/ _ \| '__| / _` |/ _ \ \ / / _ \ |/ _ \| '_ \ / _ \
// '__/ __|
// \__ \ __/ | \ V /| | (_| __/ | || (_) | | | (_| | __/\ V / __/ | (_) | |_) | __/
// | \__
// |___/\___|_| \_/ |_|\___\___| |_| \___/|_| \__,_|\___| \_/ \___|_|\___/| .__/
// \___|_| |___/
// ______ ______ ______ ______ ______ ______ ______ ______ | |
// |______|______|______|______|______|______|______|______| |_|
//
#import "QCloudCOSTransferMangerService.h"
#import <QCloudCore/QCloudThreadSafeMutableDictionary.h>
#import <QCloudCore/QCloudError.h>
#import "QCloudPutObjectRequest.h"
#import "QCloudInitiateMultipartUploadRequest.h"
#import "QCloudUploadPartRequest.h"
#import "QCloudCompleteMultipartUploadRequest.h"
#import "QCloudCOSXMLService.h"
#import "QCloudCOSXMLUploadObjectRequest.h"
#import "QCloudCOSXMLUploadObjectRequest_Private.h"
#import "QCloudCOSXMLDownloadObjectRequest.h"
#import "QCloudCOSXMLCopyObjectRequest.h"
QCloudThreadSafeMutableDictionary *QCloudCOSTransferMangerServiceCache() {
static QCloudThreadSafeMutableDictionary *CloudcostransfermangerService = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
CloudcostransfermangerService = [QCloudThreadSafeMutableDictionary new];
});
return CloudcostransfermangerService;
}
@interface QCloudCOSTransferMangerService ()
@property (nonatomic, strong, readonly) QCloudOperationQueue *uploadFileQueue;
@end
@implementation QCloudCOSTransferMangerService
static QCloudCOSTransferMangerService *COSTransferMangerService = nil;
+ (QCloudCOSTransferMangerService *)defaultCOSTransferManager {
@synchronized(self) {
if (!COSTransferMangerService) {
@throw [NSException exceptionWithName:QCloudErrorDomain reason:@"您没有配置默认的OCR服务配置请配置之后再调用该方法" userInfo:nil];
}
return COSTransferMangerService;
}
}
+ (QCloudCOSTransferMangerService *)registerDefaultCOSTransferMangerWithConfiguration:(QCloudServiceConfiguration *)configuration {
@synchronized(self) {
if(!COSTransferMangerService){
COSTransferMangerService = [[QCloudCOSTransferMangerService alloc] initWithConfiguration:configuration];
}
}
return COSTransferMangerService;
}
+ (QCloudCOSTransferMangerService *)costransfermangerServiceForKey:(NSString *)key {
QCloudCOSTransferMangerService *costransfermangerService = [QCloudCOSTransferMangerServiceCache() objectForKey:key];
if (!costransfermangerService) {
@throw [NSException exceptionWithName:QCloudErrorDomain
reason:[NSString stringWithFormat:@"您没有配置Key为%@的OCR服务配置请配置之后再调用该方法", key]
userInfo:nil];
}
return costransfermangerService;
}
+ (QCloudCOSTransferMangerService *)registerCOSTransferMangerWithConfiguration:(QCloudServiceConfiguration *)configuration withKey:(NSString *)key;
{
QCloudCOSTransferMangerService * costransfermangerService = [QCloudCOSTransferMangerServiceCache() objectForKey:key];
if(!costransfermangerService){
costransfermangerService = [[QCloudCOSTransferMangerService alloc] initWithConfiguration:configuration];
[QCloudCOSTransferMangerServiceCache() setObject:costransfermangerService forKey:key];
}
return costransfermangerService;
}
- (instancetype)initWithConfiguration:(QCloudServiceConfiguration *)configuration {
self = [super initWithConfiguration:configuration];
if (!self) {
return self;
}
_cosService = [[QCloudCOSXMLService alloc] initWithConfiguration:configuration];
_uploadFileQueue = [QCloudOperationQueue new];
_uploadFileQueue.maxConcurrentCountLimit = [QCloudHTTPSessionManager shareClient].maxConcurrentCountLimit;
_uploadFileQueue.customConcurrentCount = [QCloudHTTPSessionManager shareClient].customConcurrentCount;
return self;
}
- (void)UploadObject:(QCloudCOSXMLUploadObjectRequest *)request {
request.transferManager = self;
if (request.networkType != QCloudRequestNetworkNone) {
request.enableQuic = request.networkType == QCloudRequestNetworkQuic;
}else{
request.enableQuic = self.configuration.enableQuic;
}
QCloudLogDebugP(@"Upload",@"UploadObject set transferManager %@", request.transferManager);
QCloudFakeRequestOperation *operation = [[QCloudFakeRequestOperation alloc] initWithRequest:request];
[self.uploadFileQueue addOpreation:operation];
}
- (void)CopyObject:(QCloudCOSXMLCopyObjectRequest *)request {
request.transferManager = self;
if (request.networkType != QCloudRequestNetworkNone) {
request.enableQuic = request.networkType == QCloudRequestNetworkQuic;
}else{
request.enableQuic = self.configuration.enableQuic;
}
QCloudFakeRequestOperation *operation = [[QCloudFakeRequestOperation alloc] initWithRequest:request];
[self.uploadFileQueue addOpreation:operation];
}
- (void)DownloadObject:(QCloudCOSXMLDownloadObjectRequest *)request {
request.transferManager = self;
if (request.networkType != QCloudRequestNetworkNone) {
request.enableQuic = request.networkType == QCloudRequestNetworkQuic;
}else{
request.enableQuic = self.configuration.enableQuic;
}
QCloudFakeRequestOperation *operation = [[QCloudFakeRequestOperation alloc] initWithRequest:request];
[self.uploadFileQueue addOpreation:operation];
}
#pragma mark - UIApplicationDelegate interceptor
+ (BOOL)hasTransferMangerServiceForKey:(NSString *)key {
if (nil == [QCloudCOSTransferMangerServiceCache() objectForKey:key]) {
return NO;
} else {
return YES;
}
}
+ (void)removeTransferMangerServiceWithKey:(NSString *)key {
[QCloudCOSTransferMangerServiceCache() removeObjectForKey:key];
}
@end