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)contextDatacenterAuthInfoUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId authInfo:(MTDatacenterAuthInfo *)authInfo;
- (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)contextDatacenterPublicKeysUpdated:(MTContext *)context datacenterId:(NSInteger)datacenterId publicKeys:(NSArray<NSDictionary *> *)publicKeys;
- (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];
}
if (previousAddressSetWasEmpty || updateSchemes || true) {
if (true) {
bool shouldReset = previousAddressSetWasEmpty || updateSchemes;
for (id<MTContextChangeListener> listener in currentListeners) {
if ([listener respondsToSelector:@selector(contextDatacenterTransportSchemesUpdated:datacenterId:)]) {
[listener contextDatacenterTransportSchemesUpdated:self datacenterId:datacenterId];
if ([listener respondsToSelector:@selector(contextDatacenterTransportSchemesUpdated:datacenterId:shouldReset:)]) {
[listener contextDatacenterTransportSchemesUpdated:self datacenterId:datacenterId shouldReset:shouldReset];
}
}
} else {
@ -664,8 +665,8 @@ static int32_t fixedTimeDifferenceValue = 0;
}
for (id<MTContextChangeListener> listener in currentListeners) {
if ([listener respondsToSelector:@selector(contextDatacenterTransportSchemesUpdated:datacenterId:)])
[listener contextDatacenterTransportSchemesUpdated:self datacenterId:datacenterId];
if ([listener respondsToSelector:@selector(contextDatacenterTransportSchemesUpdated:datacenterId:shouldReset:)])
[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:^ {
if (context == _context && datacenterId == _datacenterId && ![self isStopped]) {
bool resolvedShouldReset = shouldReset;
if (_mtState & MTProtoStateAwaitingDatacenterScheme) {
[self setMtState:_mtState & (~MTProtoStateAwaitingDatacenterScheme)];
resolvedShouldReset = true;
}
[self resetTransport];
[self requestTransportTransaction];
if (resolvedShouldReset) {
[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))
#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
let mtProto = MTProto(context: context, datacenterId: datacenterId, usageCalculationInfo: usageCalculationInfo(basePath: basePath, category: nil), requiredAuthToken: nil, authTokenMasterDatacenterId: 0)!