QNUploadServerFreezeManager.m 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 *type;
  12. @property(nonatomic, strong)NSDate *freezeDate;
  13. @end
  14. @implementation QNUploadServerFreezeItem
  15. + (instancetype)item:(NSString *)type{
  16. QNUploadServerFreezeItem *item = [[QNUploadServerFreezeItem alloc] init];
  17. item.type = type;
  18. return item;
  19. }
  20. - (BOOL)isFrozenByDate:(NSDate *)date{
  21. BOOL isFrozen = YES;
  22. @synchronized (self) {
  23. if (!self.freezeDate || [self.freezeDate timeIntervalSinceDate:date] < 0){
  24. isFrozen = NO;
  25. }
  26. }
  27. return isFrozen;
  28. }
  29. - (void)freeze:(NSInteger)frozenTime{
  30. @synchronized (self) {
  31. self.freezeDate = [NSDate dateWithTimeIntervalSinceNow:frozenTime];
  32. }
  33. }
  34. @end
  35. @interface QNUploadServerFreezeManager()
  36. @property(nonatomic, strong)NSMutableDictionary *freezeInfo;
  37. @end
  38. @implementation QNUploadServerFreezeManager
  39. - (instancetype)init{
  40. if (self = [super init]) {
  41. _freezeInfo = [NSMutableDictionary dictionary];
  42. }
  43. return self;
  44. }
  45. - (BOOL)isTypeFrozen:(NSString * _Nullable)type {
  46. if (!type || type.length == 0) {
  47. return true;
  48. }
  49. BOOL isFrozen = true;
  50. QNUploadServerFreezeItem *item = nil;
  51. @synchronized (self) {
  52. item = self.freezeInfo[type];
  53. }
  54. if (!item || ![item isFrozenByDate:[NSDate date]]) {
  55. isFrozen = false;
  56. }
  57. return isFrozen;
  58. }
  59. - (void)freezeType:(NSString * _Nullable)type frozenTime:(NSInteger)frozenTime {
  60. if (!type || type.length == 0) {
  61. return;
  62. }
  63. QNUploadServerFreezeItem *item = nil;
  64. @synchronized (self) {
  65. item = self.freezeInfo[type];
  66. if (!item) {
  67. item = [QNUploadServerFreezeItem item:type];
  68. self.freezeInfo[type] = item;
  69. }
  70. }
  71. [item freeze:frozenTime];
  72. }
  73. - (void)unfreezeType:(NSString * _Nullable)type {
  74. if (!type || type.length == 0) {
  75. return;
  76. }
  77. @synchronized (self) {
  78. [self.freezeInfo removeObjectForKey:type];
  79. }
  80. }
  81. @end