Don't reconnect on scheme discovery unless necessary

This commit is contained in:
Ali 2019-11-26 20:47:37 +04:00
parent 0c22b4b37c
commit fdda2fd2ce
4 changed files with 16 additions and 10 deletions

View File

@ -22,7 +22,7 @@
- (void)contextDatacenterAddressSetUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId addressSet:(MTDatacenterAddressSet *)addressSet; - (void)contextDatacenterAddressSetUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId addressSet:(MTDatacenterAddressSet *)addressSet;
- (void)contextDatacenterAuthInfoUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId authInfo:(MTDatacenterAuthInfo *)authInfo; - (void)contextDatacenterAuthInfoUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId authInfo:(MTDatacenterAuthInfo *)authInfo;
- (void)contextDatacenterAuthTokenUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId authToken:(id)authToken; - (void)contextDatacenterAuthTokenUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId authToken:(id)authToken;
- (void)contextDatacenterTransportSchemesUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId; - (void)contextDatacenterTransportSchemesUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId shouldReset:(bool)shouldReset;
- (void)contextIsPasswordRequiredUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId; - (void)contextIsPasswordRequiredUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId;
- (void)contextDatacenterPublicKeysUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId publicKeys:(NSArray<NSDictionary *> *)publicKeys; - (void)contextDatacenterPublicKeysUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId publicKeys:(NSArray<NSDictionary *> *)publicKeys;
- (MTSignal *)fetchContextDatacenterPublicKeys:(MTContext *)context datacenterId:(NSInteger)datacenterId; - (MTSignal *)fetchContextDatacenterPublicKeys:(MTContext *)context datacenterId:(NSInteger)datacenterId;

View File

@ -491,10 +491,11 @@ static int32_t fixedTimeDifferenceValue = 0;
[listener contextDatacenterAddressSetUpdated:self datacenterId:datacenterId addressSet:addressSet]; [listener contextDatacenterAddressSetUpdated:self datacenterId:datacenterId addressSet:addressSet];
} }
if (previousAddressSetWasEmpty || updateSchemes || true) { if (true) {
bool shouldReset = previousAddressSetWasEmpty || updateSchemes;
for (id<MTContextChangeListener> listener in currentListeners) { for (id<MTContextChangeListener> listener in currentListeners) {
if ([listener respondsToSelector:@selector(contextDatacenterTransportSchemesUpdated:datacenterId:)]) { if ([listener respondsToSelector:@selector(contextDatacenterTransportSchemesUpdated:datacenterId:shouldReset:)]) {
[listener contextDatacenterTransportSchemesUpdated:self datacenterId:datacenterId]; [listener contextDatacenterTransportSchemesUpdated:self datacenterId:datacenterId shouldReset:shouldReset];
} }
} }
} else { } else {
@ -664,8 +665,8 @@ static int32_t fixedTimeDifferenceValue = 0;
} }
for (id<MTContextChangeListener> listener in currentListeners) { for (id<MTContextChangeListener> listener in currentListeners) {
if ([listener respondsToSelector:@selector(contextDatacenterTransportSchemesUpdated:datacenterId:)]) if ([listener respondsToSelector:@selector(contextDatacenterTransportSchemesUpdated:datacenterId:shouldReset:)])
[listener contextDatacenterTransportSchemesUpdated:self datacenterId:datacenterId]; [listener contextDatacenterTransportSchemesUpdated:self datacenterId:datacenterId shouldReset:true];
} }
} }
}]; }];

View File

@ -2715,15 +2715,20 @@ static NSString *dumpHexString(NSData *data, int maxLength) {
} }
} }
- (void)contextDatacenterTransportSchemesUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId { - (void)contextDatacenterTransportSchemesUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId shouldReset:(bool)shouldReset {
[[MTProto managerQueue] dispatchOnQueue:^ { [[MTProto managerQueue] dispatchOnQueue:^ {
if (context == _context && datacenterId == _datacenterId && ![self isStopped]) { if (context == _context && datacenterId == _datacenterId && ![self isStopped]) {
bool resolvedShouldReset = shouldReset;
if (_mtState & MTProtoStateAwaitingDatacenterScheme) { if (_mtState & MTProtoStateAwaitingDatacenterScheme) {
[self setMtState:_mtState & (~MTProtoStateAwaitingDatacenterScheme)]; [self setMtState:_mtState & (~MTProtoStateAwaitingDatacenterScheme)];
resolvedShouldReset = true;
} }
[self resetTransport]; if (resolvedShouldReset) {
[self requestTransportTransaction]; [self resetTransport];
[self requestTransportTransaction];
}
} }
}]; }];
} }

View File

@ -514,7 +514,7 @@ func initializedNetwork(arguments: NetworkInitializationArguments, supplementary
context.setDiscoverBackupAddressListSignal(MTBackupAddressSignals.fetchBackupIps(testingEnvironment, currentContext: context, additionalSource: wrappedAdditionalSource, phoneNumber: phoneNumber)) context.setDiscoverBackupAddressListSignal(MTBackupAddressSignals.fetchBackupIps(testingEnvironment, currentContext: context, additionalSource: wrappedAdditionalSource, phoneNumber: phoneNumber))
#if DEBUG #if DEBUG
let _ = MTBackupAddressSignals.fetchBackupIps(testingEnvironment, currentContext: context, additionalSource: wrappedAdditionalSource, phoneNumber: phoneNumber).start(next: nil) //let _ = MTBackupAddressSignals.fetchBackupIps(testingEnvironment, currentContext: context, additionalSource: wrappedAdditionalSource, phoneNumber: phoneNumber).start(next: nil)
#endif #endif
let mtProto = MTProto(context: context, datacenterId: datacenterId, usageCalculationInfo: usageCalculationInfo(basePath: basePath, category: nil), requiredAuthToken: nil, authTokenMasterDatacenterId: 0)! let mtProto = MTProto(context: context, datacenterId: datacenterId, usageCalculationInfo: usageCalculationInfo(basePath: basePath, category: nil), requiredAuthToken: nil, authTokenMasterDatacenterId: 0)!