| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- //
- // QNUploadServerFreezeManager.m
- // QiniuSDK
- //
- // Created by yangsen on 2020/6/2.
- // Copyright © 2020 Qiniu. All rights reserved.
- //
- #import "QNConfiguration.h"
- #import "QNUploadServerFreezeManager.h"
- @interface QNUploadServerFreezeItem : NSObject
- @property(nonatomic, copy)NSString *host;
- @property(nonatomic, copy)NSString *type;
- @property(nonatomic, strong)NSDate *freezeDate;
- @end
- @implementation QNUploadServerFreezeItem
- + (instancetype)item:(NSString *)host type:(NSString *)type{
- QNUploadServerFreezeItem *item = [[QNUploadServerFreezeItem alloc] init];
- item.host = host;
- item.type = type;
- return item;
- }
- - (BOOL)isFrozenByDate:(NSDate *)date{
- BOOL isFrozen = YES;
- @synchronized (self) {
- if (!self.freezeDate || [self.freezeDate timeIntervalSinceDate:date] < 0){
- isFrozen = NO;
- }
- }
- return isFrozen;
- }
- - (void)freeze:(NSInteger)frozenTime{
- @synchronized (self) {
- self.freezeDate = [NSDate dateWithTimeIntervalSinceNow:frozenTime];
- }
- }
- @end
- @interface QNUploadServerFreezeManager()
- @property(nonatomic, strong)NSMutableDictionary *freezeInfo;
- @end
- @implementation QNUploadServerFreezeManager
- + (instancetype)shared{
- static QNUploadServerFreezeManager *manager = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- manager = [[QNUploadServerFreezeManager alloc] init];
- });
- return manager;
- }
- - (instancetype)init{
- if (self = [super init]) {
- _freezeInfo = [NSMutableDictionary dictionary];
- }
- return self;
- }
- - (BOOL)isFrozenHost:(NSString *)host type:(NSString *)type{
- if (!host || host.length == 0) {
- return true;
- }
- BOOL isFrozen = true;
- NSString *infoKey = [self getItemInfoKey:host type:type];
-
- QNUploadServerFreezeItem *item = nil;
- @synchronized (self) {
- item = self.freezeInfo[infoKey];
- }
- if (!item || ![item isFrozenByDate:[NSDate date]]) {
- isFrozen = false;
- }
- return isFrozen;
- }
- - (void)freezeHost:(NSString *)host
- type:(NSString * _Nullable)type
- frozenTime:(NSInteger)frozenTime{
- if (!host || host.length == 0) {
- return;
- }
- NSString *infoKey = [self getItemInfoKey:host type:type];
- QNUploadServerFreezeItem *item = nil;
- @synchronized (self) {
- item = self.freezeInfo[infoKey];
- if (!item) {
- item = [QNUploadServerFreezeItem item:host type:type];
- self.freezeInfo[infoKey] = item;
- }
- }
- [item freeze:frozenTime];
- }
- - (void)unfreezeHost:(NSString *)host type:(NSString *)type {
- if (!host || host.length == 0) {
- return;
- }
- NSString *infoKey = [self getItemInfoKey:host type:type];
- if (infoKey != nil){
- @synchronized (self) {
- [self.freezeInfo removeObjectForKey:infoKey];
- }
- }
- }
- - (NSString *)getItemInfoKey:(NSString *)host type:(NSString *)type{
- return [NSString stringWithFormat:@"%@:%@", host ?: @"none", type ?: @"none"];
- }
- @end
|