QNUploadServerFreezeManager.m 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. //
  2. // QNUploadServerFreezeManager.m
  3. // QiniuSDK
  4. //
  5. // Created by yangsen on 2020/6/2.
  6. // Copyright © 2020 Qiniu. All rights reserved.
  7. //
  8. #import "QNConfiguration.h"
  9. #import "QNUploadServerFreezeManager.h"
  10. @interface QNUploadServerFreezeItem : NSObject
  11. @property(nonatomic, copy)NSString *host;
  12. @property(nonatomic, copy)NSString *type;
  13. @property(nonatomic, strong)NSDate *freezeDate;
  14. @end
  15. @implementation QNUploadServerFreezeItem
  16. + (instancetype)item:(NSString *)host type:(NSString *)type{
  17. QNUploadServerFreezeItem *item = [[QNUploadServerFreezeItem alloc] init];
  18. item.host = host;
  19. item.type = type;
  20. return item;
  21. }
  22. - (BOOL)isFrozenByDate:(NSDate *)date{
  23. BOOL isFrozen = YES;
  24. @synchronized (self) {
  25. if (!self.freezeDate || [self.freezeDate timeIntervalSinceDate:date] < 0){
  26. isFrozen = NO;
  27. }
  28. }
  29. return isFrozen;
  30. }
  31. - (void)freeze:(NSInteger)frozenTime{
  32. @synchronized (self) {
  33. self.freezeDate = [NSDate dateWithTimeIntervalSinceNow:frozenTime];
  34. }
  35. }
  36. @end
  37. @interface QNUploadServerFreezeManager()
  38. @property(nonatomic, strong)NSMutableDictionary *freezeInfo;
  39. @end
  40. @implementation QNUploadServerFreezeManager
  41. + (instancetype)shared{
  42. static QNUploadServerFreezeManager *manager = nil;
  43. static dispatch_once_t onceToken;
  44. dispatch_once(&onceToken, ^{
  45. manager = [[QNUploadServerFreezeManager alloc] init];
  46. });
  47. return manager;
  48. }
  49. - (instancetype)init{
  50. if (self = [super init]) {
  51. _freezeInfo = [NSMutableDictionary dictionary];
  52. }
  53. return self;
  54. }
  55. - (BOOL)isFrozenHost:(NSString *)host type:(NSString *)type{
  56. if (!host || host.length == 0) {
  57. return true;
  58. }
  59. BOOL isFrozen = true;
  60. NSString *infoKey = [self getItemInfoKey:host type:type];
  61. QNUploadServerFreezeItem *item = nil;
  62. @synchronized (self) {
  63. item = self.freezeInfo[infoKey];
  64. }
  65. if (!item || ![item isFrozenByDate:[NSDate date]]) {
  66. isFrozen = false;
  67. }
  68. return isFrozen;
  69. }
  70. - (void)freezeHost:(NSString *)host
  71. type:(NSString * _Nullable)type
  72. frozenTime:(NSInteger)frozenTime{
  73. if (!host || host.length == 0) {
  74. return;
  75. }
  76. NSString *infoKey = [self getItemInfoKey:host type:type];
  77. QNUploadServerFreezeItem *item = nil;
  78. @synchronized (self) {
  79. item = self.freezeInfo[infoKey];
  80. if (!item) {
  81. item = [QNUploadServerFreezeItem item:host type:type];
  82. self.freezeInfo[infoKey] = item;
  83. }
  84. }
  85. [item freeze:frozenTime];
  86. }
  87. - (void)unfreezeHost:(NSString *)host type:(NSString *)type {
  88. if (!host || host.length == 0) {
  89. return;
  90. }
  91. NSString *infoKey = [self getItemInfoKey:host type:type];
  92. if (infoKey != nil){
  93. @synchronized (self) {
  94. [self.freezeInfo removeObjectForKey:infoKey];
  95. }
  96. }
  97. }
  98. - (NSString *)getItemInfoKey:(NSString *)host type:(NSString *)type{
  99. return [NSString stringWithFormat:@"%@:%@", host ?: @"none", type ?: @"none"];
  100. }
  101. @end