QNFixedZone.m 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. //
  2. // QNFixZone.m
  3. // QiniuSDK
  4. //
  5. // Created by yangsen on 2020/4/16.
  6. // Copyright © 2020 Qiniu. All rights reserved.
  7. //
  8. #import "QNFixedZone.h"
  9. #import "QNZoneInfo.h"
  10. @interface QNFixedZone ()
  11. @property (nonatomic, strong) QNZonesInfo *zonesInfo;
  12. @end
  13. @implementation QNFixedZone
  14. - (instancetype)initWithupDomainList:(NSArray<NSString *> *)upList {
  15. if (self = [super init]) {
  16. self.zonesInfo = [self createZonesInfo:upList zoneRegion:QNZoneRegion_unknown];
  17. }
  18. return self;
  19. }
  20. - (instancetype)initWithupDomainList:(NSArray<NSString *> *)upList
  21. zoneRegion:(QNZoneRegion)zoneRegion {
  22. if (self = [super init]) {
  23. self.zonesInfo = [self createZonesInfo:upList zoneRegion:zoneRegion];
  24. }
  25. return self;
  26. }
  27. + (instancetype)createWithHost:(NSArray<NSString *> *)upList {
  28. return [[QNFixedZone alloc] initWithupDomainList:upList zoneRegion:QNZoneRegion_unknown];
  29. }
  30. + (instancetype)zone0 {
  31. static QNFixedZone *z0 = nil;
  32. static dispatch_once_t onceToken;
  33. dispatch_once(&onceToken, ^{
  34. NSArray<NSString *> *uplist = @[@"upload.qiniup.com", @"upload-nb.qiniup.com",
  35. @"upload-xs.qiniup.com", @"up.qiniup.com",
  36. @"up-nb.qiniup.com", @"up-xs.qiniup.com",
  37. @"upload.qbox.me", @"up.qbox.me"];
  38. z0 = [QNFixedZone createWithHost:(NSArray<NSString *> *)uplist];
  39. });
  40. return z0;
  41. }
  42. + (instancetype)zone1 {
  43. static QNFixedZone *z1 = nil;
  44. static dispatch_once_t onceToken;
  45. dispatch_once(&onceToken, ^{
  46. NSArray<NSString *> *uplist = @[@"upload-z1.qiniup.com", @"up-z1.qiniup.com",
  47. @"upload-z1.qbox.me", @"up-z1.qbox.me"];
  48. z1 = [QNFixedZone createWithHost:(NSArray<NSString *> *)uplist];
  49. });
  50. return z1;
  51. }
  52. + (instancetype)zone2 {
  53. static QNFixedZone *z2 = nil;
  54. static dispatch_once_t onceToken;
  55. dispatch_once(&onceToken, ^{
  56. NSArray<NSString *> *uplist = @[@"upload-z2.qiniup.com", @"upload-gz.qiniup.com",
  57. @"upload-fs.qiniup.com", @"up-z2.qiniup.com",
  58. @"up-gz.qiniup.com", @"up-fs.qiniup.com",
  59. @"upload-z2.qbox.me", @"up-z2.qbox.me"];
  60. z2 = [QNFixedZone createWithHost:(NSArray<NSString *> *)uplist];
  61. });
  62. return z2;
  63. }
  64. + (instancetype)zoneNa0 {
  65. static QNFixedZone *zNa0 = nil;
  66. static dispatch_once_t onceToken;
  67. dispatch_once(&onceToken, ^{
  68. NSArray<NSString *> *uplist = @[@"upload-na0.qiniup.com", @"up-na0.qiniup.com",
  69. @"upload-na0.qbox.me", @"up-na0.qbox.me"];
  70. zNa0 = [QNFixedZone createWithHost:(NSArray<NSString *> *)uplist];
  71. });
  72. return zNa0;
  73. }
  74. + (instancetype)zoneAs0 {
  75. static QNFixedZone *zAs0 = nil;
  76. static dispatch_once_t onceToken;
  77. dispatch_once(&onceToken, ^{
  78. NSArray<NSString *> *uplist = @[@"upload-as0.qiniup.com", @"up-as0.qiniup.com",
  79. @"upload-as0.qbox.me", @"up-as0.qbox.me"];
  80. zAs0 = [QNFixedZone createWithHost:(NSArray<NSString *> *)uplist];
  81. });
  82. return zAs0;
  83. }
  84. + (NSArray <QNFixedZone *> *)localsZoneInfo{
  85. NSArray *zonesInfo = @[[QNFixedZone zone0],
  86. [QNFixedZone zone1],
  87. [QNFixedZone zone2],
  88. [QNFixedZone zoneNa0],
  89. [QNFixedZone zoneAs0]];
  90. return zonesInfo;
  91. }
  92. - (QNZonesInfo *)createZonesInfo:(NSArray<NSString *> *)upDomainList
  93. zoneRegion:(QNZoneRegion)zoneRegion {
  94. NSMutableDictionary *upDomainDic = [[NSMutableDictionary alloc] init];
  95. for (NSString *upDomain in upDomainList) {
  96. [upDomainDic setValue:[NSDate dateWithTimeIntervalSince1970:0] forKey:upDomain];
  97. }
  98. QNZoneInfo *zoneInfo = [[QNZoneInfo alloc] init:86400 upDomainsList:(NSMutableArray<NSString *> *)upDomainList upDomainsDic:upDomainDic zoneRegion:zoneRegion];
  99. QNZonesInfo *zonesInfo = [[QNZonesInfo alloc] initWithZonesInfo:@[zoneInfo]];
  100. return zonesInfo;
  101. }
  102. - (void)preQuery:(QNUpToken *)token
  103. on:(QNPrequeryReturn)ret {
  104. ret(0, nil);
  105. }
  106. - (QNZonesInfo *)getZonesInfoWithToken:(QNUpToken *)token {
  107. return self.zonesInfo;
  108. }
  109. - (NSString *)up:(QNUpToken *)token
  110. zoneInfoType:(QNZoneInfoType)zoneInfoType
  111. isHttps:(BOOL)isHttps
  112. frozenDomain:(NSString *)frozenDomain {
  113. if (self.zonesInfo == nil) {
  114. return nil;
  115. }
  116. return [super upHost:[self.zonesInfo getZoneInfoWithType:QNZoneInfoTypeMain] isHttps:isHttps lastUpHost:frozenDomain];
  117. }
  118. @end