This commit is contained in:
overtake
2017-06-21 15:47:01 +03:00
5 changed files with 46 additions and 20 deletions

View File

@@ -150,8 +150,8 @@
id<MTTransportDelegate> delegate = self.delegate;
if ([delegate respondsToSelector:@selector(transportNetworkAvailabilityChanged:isNetworkAvailable:)])
[delegate transportNetworkAvailabilityChanged:self isNetworkAvailable:_isNetworkAvailable];
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:)])
[delegate transportConnectionStateChanged:self isConnected:_isConnected];
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:isUsingProxy:)])
[delegate transportConnectionStateChanged:self isConnected:_isConnected isUsingProxy:false];
if ([delegate respondsToSelector:@selector(transportConnectionContextUpdateStateChanged:isUpdatingConnectionContext:)])
[delegate transportConnectionContextUpdateStateChanged:self isUpdatingConnectionContext:_currentActualizationPingId != 0];
}];
@@ -199,8 +199,8 @@
_isConnected = false;
id<MTTransportDelegate> delegate = self.delegate;
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:)])
[delegate transportConnectionStateChanged:self isConnected:_isConnected];
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:isUsingProxy:)])
[delegate transportConnectionStateChanged:self isConnected:_isConnected isUsingProxy:false];
}
}];
}
@@ -281,8 +281,8 @@
_isConnected = true;
id<MTTransportDelegate> delegate = self.delegate;
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:)])
[delegate transportConnectionStateChanged:self isConnected:_isConnected];
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:isUsingProxy:)])
[delegate transportConnectionStateChanged:self isConnected:_isConnected isUsingProxy:false];
}
[self stopConnectionWatchdogTimer];

View File

@@ -16,12 +16,19 @@
@class MTProto;
@interface MTProtoConnectionState : NSObject
@property (nonatomic, readonly) bool isConnected;
@property (nonatomic, readonly) bool isUsingProxy;
@end
@protocol MTProtoDelegate <NSObject>
@optional
- (void)mtProtoNetworkAvailabilityChanged:(MTProto *)mtProto isNetworkAvailable:(bool)isNetworkAvailable;
- (void)mtProtoConnectionStateChanged:(MTProto *)mtProto isConnected:(bool)isConnected;
- (void)mtProtoConnectionStateChanged:(MTProto *)mtProto state:(MTProtoConnectionState *)state;
- (void)mtProtoConnectionContextUpdateStateChanged:(MTProto *)mtProto isUpdatingConnectionContext:(bool)isUpdatingConnectionContext;
- (void)mtProtoServiceTasksStateChanged:(MTProto *)mtProto isPerformingServiceTasks:(bool)isPerformingServiceTasks;

View File

@@ -73,6 +73,19 @@ static const NSUInteger MTMaxContainerSize = 3 * 1024;
static const NSUInteger MTMaxUnacknowledgedMessageSize = 1 * 1024 * 1024;
static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
@implementation MTProtoConnectionState
- (instancetype)initWithIsConnected:(bool)isConnected isUsingProxy:(bool)isUsingProxy {
self = [super init];
if (self != nil) {
_isConnected = isConnected;
_isUsingProxy = isUsingProxy;
}
return self;
}
@end
@interface MTProto () <MTContextChangeListener, MTTransportDelegate, MTTimeSyncMessageServiceDelegate, MTResendMessageServiceDelegate>
{
NSMutableArray *_messageServices;
@@ -219,7 +232,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
if ([delegate respondsToSelector:@selector(mtProtoNetworkAvailabilityChanged:isNetworkAvailable:)])
[delegate mtProtoNetworkAvailabilityChanged:self isNetworkAvailable:false];
if ([delegate respondsToSelector:@selector(mtProtoConnectionStateChanged:isConnected:)])
[delegate mtProtoConnectionStateChanged:self isConnected:false];
[delegate mtProtoConnectionStateChanged:self state:nil];
if ([delegate respondsToSelector:@selector(mtProtoConnectionContextUpdateStateChanged:isUpdatingConnectionContext:)])
[delegate mtProtoConnectionContextUpdateStateChanged:self isUpdatingConnectionContext:false];
}
@@ -662,7 +675,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
}];
}
- (void)transportConnectionStateChanged:(MTTransport *)transport isConnected:(bool)isConnected
- (void)transportConnectionStateChanged:(MTTransport *)transport isConnected:(bool)isConnected isUsingProxy:(bool)isUsingProxy
{
[[MTProto managerQueue] dispatchOnQueue:^
{
@@ -680,8 +693,8 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
}
id<MTProtoDelegate> delegate = _delegate;
if ([delegate respondsToSelector:@selector(mtProtoConnectionStateChanged:isConnected:)])
[delegate mtProtoConnectionStateChanged:self isConnected:isConnected];
if ([delegate respondsToSelector:@selector(mtProtoConnectionStateChanged:state:)])
[delegate mtProtoConnectionStateChanged:self state:[[MTProtoConnectionState alloc] initWithIsConnected:isConnected isUsingProxy:isUsingProxy]];
}];
}

View File

@@ -28,12 +28,16 @@
#import "MTBuffer.h"
#import "MTPongMessage.h"
#import "MTContext.h"
#import "MTApiEnvironment.h"
static const NSTimeInterval MTTcpTransportSleepWatchdogTimeout = 60.0;
@interface MTTcpTransportContext : NSObject
@property (nonatomic, strong) MTDatacenterAddress *address;
@property (nonatomic, strong) MTTcpConnection *connection;
@property (nonatomic) bool isUsingProxy;
@property (nonatomic) bool connectionConnected;
@property (nonatomic) bool connectionIsValid;
@@ -112,6 +116,8 @@ static const NSTimeInterval MTTcpTransportSleepWatchdogTimeout = 60.0;
transportContext.connectionBehaviour.delegate = self;
transportContext.isNetworkAvailable = true;
transportContext.isUsingProxy = context.apiEnvironment.socksProxySettings != nil;
}];
}
return self;
@@ -157,8 +163,8 @@ static const NSTimeInterval MTTcpTransportSleepWatchdogTimeout = 60.0;
id<MTTransportDelegate> delegate = self.delegate;
if ([delegate respondsToSelector:@selector(transportNetworkAvailabilityChanged:isNetworkAvailable:)])
[delegate transportNetworkAvailabilityChanged:self isNetworkAvailable:transportContext.isNetworkAvailable];
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:)])
[delegate transportConnectionStateChanged:self isConnected:transportContext.connectionConnected];
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:isUsingProxy:)])
[delegate transportConnectionStateChanged:self isConnected:transportContext.connectionConnected isUsingProxy:transportContext.isUsingProxy];
if ([delegate respondsToSelector:@selector(transportConnectionContextUpdateStateChanged:isUpdatingConnectionContext:)])
[delegate transportConnectionContextUpdateStateChanged:self isUpdatingConnectionContext:transportContext.currentActualizationPingMessageId != 0];
}];
@@ -230,8 +236,8 @@ static const NSTimeInterval MTTcpTransportSleepWatchdogTimeout = 60.0;
transportContext.connectionIsValid = false;
id<MTTransportDelegate> delegate = self.delegate;
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:)])
[delegate transportConnectionStateChanged:self isConnected:false];
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:isUsingProxy:)])
[delegate transportConnectionStateChanged:self isConnected:false isUsingProxy:transportContext.isUsingProxy];
transportContext.connectionBehaviour.needsReconnection = false;
@@ -401,8 +407,8 @@ static const NSTimeInterval MTTcpTransportSleepWatchdogTimeout = 60.0;
[transportContext.connectionBehaviour connectionOpened];
id<MTTransportDelegate> delegate = self.delegate;
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:)])
[delegate transportConnectionStateChanged:self isConnected:true];
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:isUsingProxy:)])
[delegate transportConnectionStateChanged:self isConnected:true isUsingProxy:transportContext.isUsingProxy];
transportContext.didSendActualizationPingAfterConnection = false;
transportContext.currentActualizationPingMessageId = 0;
@@ -432,8 +438,8 @@ static const NSTimeInterval MTTcpTransportSleepWatchdogTimeout = 60.0;
[self restartSleepWatchdogTimer];
id<MTTransportDelegate> delegate = self.delegate;
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:)])
[delegate transportConnectionStateChanged:self isConnected:false];
if ([delegate respondsToSelector:@selector(transportConnectionStateChanged:isConnected:isUsingProxy:)])
[delegate transportConnectionStateChanged:self isConnected:false isUsingProxy:transportContext.isUsingProxy];
if ([delegate respondsToSelector:@selector(transportTransactionsMayHaveFailed:transactionIds:)])
[delegate transportTransactionsMayHaveFailed:self transactionIds:@[connection.internalId]];

View File

@@ -30,7 +30,7 @@
@optional
- (void)transportNetworkAvailabilityChanged:(MTTransport *)transport isNetworkAvailable:(bool)isNetworkAvailable;
- (void)transportConnectionStateChanged:(MTTransport *)transport isConnected:(bool)isConnected;
- (void)transportConnectionStateChanged:(MTTransport *)transport isConnected:(bool)isConnected isUsingProxy:(bool)isUsingProxy;
- (void)transportConnectionContextUpdateStateChanged:(MTTransport *)transport isUpdatingConnectionContext:(bool)isUpdatingConnectionContext;
- (void)transportConnectionProblemsStatusChanged:(MTTransport *)transport hasConnectionProblems:(bool)hasConnectionProblems isProbablyHttp:(bool)isProbablyHttp;