Merge branch 'charlesmchen/socketCleanup' into release/2.31.0

pull/1/head
Matthew Chen 7 years ago
commit b38a1030d5

@ -119,12 +119,11 @@ public class RequestMaker: NSObject {
} }
let isUDRequest: Bool = udAccessForRequest != nil let isUDRequest: Bool = udAccessForRequest != nil
let request: TSRequest = requestFactoryBlock(udAccessForRequest?.udAccessKey) let request: TSRequest = requestFactoryBlock(udAccessForRequest?.udAccessKey)
let webSocketType: OWSWebSocketType = (isUDRequest ? .UD : .default) let canMakeWebsocketRequests = (socketManager.canMakeRequests() && !skipWebsocket && !isUDRequest)
let canMakeWebsocketRequests = (socketManager.canMakeRequests(of: webSocketType) && !skipWebsocket && !isUDRequest)
if canMakeWebsocketRequests { if canMakeWebsocketRequests {
return Promise { resolver in return Promise { resolver in
socketManager.make(request, webSocketType: webSocketType, success: { (responseObject: Any?) in socketManager.make(request, success: { (responseObject: Any?) in
if self.udManager.isUDVerboseLoggingEnabled() { if self.udManager.isUDVerboseLoggingEnabled() {
if isUDRequest { if isUDRequest {
Logger.debug("UD websocket request '\(self.label)' succeeded.") Logger.debug("UD websocket request '\(self.label)' succeeded.")

@ -8,11 +8,6 @@ static void *OWSWebSocketStateObservationContext = &OWSWebSocketStateObservation
extern NSString *const kNSNotification_OWSWebSocketStateDidChange; extern NSString *const kNSNotification_OWSWebSocketStateDidChange;
typedef NS_ENUM(NSUInteger, OWSWebSocketType) {
OWSWebSocketTypeDefault,
OWSWebSocketTypeUD,
};
typedef NS_ENUM(NSUInteger, OWSWebSocketState) { typedef NS_ENUM(NSUInteger, OWSWebSocketState) {
OWSWebSocketStateClosed, OWSWebSocketStateClosed,
OWSWebSocketStateConnecting, OWSWebSocketStateConnecting,
@ -29,8 +24,7 @@ typedef void (^TSSocketMessageFailure)(NSInteger statusCode, NSData *_Nullable r
@property (nonatomic, readonly) OWSWebSocketState state; @property (nonatomic, readonly) OWSWebSocketState state;
- (instancetype)init NS_UNAVAILABLE; - (instancetype)init NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithWebSocketType:(OWSWebSocketType)webSocketType NS_DESIGNATED_INITIALIZER;
// If the app is in the foreground, we'll try to open the socket unless it's already // If the app is in the foreground, we'll try to open the socket unless it's already
// open or connecting. // open or connecting.

@ -143,21 +143,9 @@ NSString *const kNSNotification_OWSWebSocketStateDidChange = @"kNSNotification_O
#pragma mark - #pragma mark -
NSString *NSStringFromOWSWebSocketType(OWSWebSocketType type)
{
switch (type) {
case OWSWebSocketTypeDefault:
return @"Default";
case OWSWebSocketTypeUD:
return @"UD";
}
}
// OWSWebSocket's properties should only be accessed from the main thread. // OWSWebSocket's properties should only be accessed from the main thread.
@interface OWSWebSocket () <SRWebSocketDelegate> @interface OWSWebSocket () <SRWebSocketDelegate>
@property (nonatomic) OWSWebSocketType webSocketType;
// This class has a few "tiers" of state. // This class has a few "tiers" of state.
// //
// The first tier is the actual websocket and the timers used // The first tier is the actual websocket and the timers used
@ -216,7 +204,7 @@ NSString *NSStringFromOWSWebSocketType(OWSWebSocketType type)
@implementation OWSWebSocket @implementation OWSWebSocket
- (instancetype)initWithWebSocketType:(OWSWebSocketType)webSocketType - (instancetype)init
{ {
self = [super init]; self = [super init];
@ -226,7 +214,6 @@ NSString *NSStringFromOWSWebSocketType(OWSWebSocketType type)
OWSAssertIsOnMainThread(); OWSAssertIsOnMainThread();
_webSocketType = webSocketType;
_state = OWSWebSocketStateClosed; _state = OWSWebSocketStateClosed;
_socketMessageMap = [NSMutableDictionary new]; _socketMessageMap = [NSMutableDictionary new];
@ -573,12 +560,11 @@ NSString *NSStringFromOWSWebSocketType(OWSWebSocketType type)
[socketMessage didFailBeforeSending]; [socketMessage didFailBeforeSending];
return; return;
} }
OWSLogInfo(@"making request: %llu, %@: %@, jsonData.length: %zd, socketType: %@", OWSLogInfo(@"making request: %llu, %@: %@, jsonData.length: %zd",
socketMessage.requestId, socketMessage.requestId,
request.HTTPMethod, request.HTTPMethod,
requestPath, requestPath,
jsonData.length, jsonData.length);
NSStringFromOWSWebSocketType(self.webSocketType));
const int64_t kSocketTimeoutSeconds = 10; const int64_t kSocketTimeoutSeconds = 10;
__weak TSSocketMessage *weakSocketMessage = socketMessage; __weak TSSocketMessage *weakSocketMessage = socketMessage;
@ -650,7 +636,7 @@ NSString *NSStringFromOWSWebSocketType(OWSWebSocketType type)
[socketMessage didSucceedWithResponseObject:responseObject]; [socketMessage didSucceedWithResponseObject:responseObject];
} else { } else {
if (responseStatus == 403 && self.webSocketType == OWSWebSocketTypeDefault) { if (responseStatus == 403) {
// This should be redundant with our check for the socket // This should be redundant with our check for the socket
// failing due to 403, but let's be thorough. // failing due to 403, but let's be thorough.
[self.tsAccountManager setIsDeregistered:YES]; [self.tsAccountManager setIsDeregistered:YES];
@ -718,7 +704,7 @@ NSString *NSStringFromOWSWebSocketType(OWSWebSocketType type)
if ([error.domain isEqualToString:SRWebSocketErrorDomain] && error.code == 2132) { if ([error.domain isEqualToString:SRWebSocketErrorDomain] && error.code == 2132) {
NSNumber *_Nullable statusCode = error.userInfo[SRHTTPResponseErrorKey]; NSNumber *_Nullable statusCode = error.userInfo[SRHTTPResponseErrorKey];
if (statusCode.unsignedIntegerValue == 403 && self.webSocketType == OWSWebSocketTypeDefault) { if (statusCode.unsignedIntegerValue == 403) {
[self.tsAccountManager setIsDeregistered:YES]; [self.tsAccountManager setIsDeregistered:YES];
} }
} }
@ -910,16 +896,9 @@ NSString *NSStringFromOWSWebSocketType(OWSWebSocketType type)
- (NSString *)webSocketAuthenticationString - (NSString *)webSocketAuthenticationString
{ {
switch (self.webSocketType) { return [NSString stringWithFormat:@"?login=%@&password=%@",
case OWSWebSocketTypeUD: [[TSAccountManager localNumber] stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"],
// UD socket is unauthenticated. [TSAccountManager serverAuthToken]];
return @"";
case OWSWebSocketTypeDefault:
return
[NSString stringWithFormat:@"?login=%@&password=%@",
[[TSAccountManager localNumber] stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"],
[TSAccountManager serverAuthToken]];
}
} }
#pragma mark - Socket LifeCycle #pragma mark - Socket LifeCycle
@ -1149,9 +1128,7 @@ NSString *NSStringFromOWSWebSocketType(OWSWebSocketType type)
{ {
OWSAssertIsOnMainThread(); OWSAssertIsOnMainThread();
if (self.webSocketType == OWSWebSocketTypeDefault) { [self cycleSocket];
[self cycleSocket];
}
} }
@end @end

@ -39,10 +39,9 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Message Sending #pragma mark - Message Sending
- (BOOL)canMakeRequestsOfType:(OWSWebSocketType)webSocketType; - (BOOL)canMakeRequests;
- (void)makeRequest:(TSRequest *)request - (void)makeRequest:(TSRequest *)request
webSocketType:(OWSWebSocketType)webSocketType
success:(TSSocketMessageSuccess)success success:(TSSocketMessageSuccess)success
failure:(TSSocketMessageFailure)failure; failure:(TSSocketMessageFailure)failure;

@ -9,8 +9,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface TSSocketManager () @interface TSSocketManager ()
@property (nonatomic) OWSWebSocket *websocketDefault; @property (nonatomic) OWSWebSocket *websocket;
@property (nonatomic) OWSWebSocket *websocketUD;
@end @end
@ -28,8 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
OWSAssertIsOnMainThread(); OWSAssertIsOnMainThread();
_websocketDefault = [[OWSWebSocket alloc] initWithWebSocketType:OWSWebSocketTypeDefault]; _websocket = [[OWSWebSocket alloc] init];
_websocketUD = [[OWSWebSocket alloc] initWithWebSocketType:OWSWebSocketTypeUD];
OWSSingletonAssert(); OWSSingletonAssert();
@ -48,51 +46,31 @@ NS_ASSUME_NONNULL_BEGIN
return SSKEnvironment.shared.socketManager; return SSKEnvironment.shared.socketManager;
} }
- (OWSWebSocket *)webSocketOfType:(OWSWebSocketType)webSocketType - (BOOL)canMakeRequests
{ {
switch (webSocketType) { return self.websocket.canMakeRequests;
case OWSWebSocketTypeDefault:
return self.websocketDefault;
case OWSWebSocketTypeUD:
return self.websocketUD;
}
}
- (BOOL)canMakeRequestsOfType:(OWSWebSocketType)webSocketType
{
return [self webSocketOfType:webSocketType].canMakeRequests;
} }
- (void)makeRequest:(TSRequest *)request - (void)makeRequest:(TSRequest *)request
webSocketType:(OWSWebSocketType)webSocketType
success:(TSSocketMessageSuccess)success success:(TSSocketMessageSuccess)success
failure:(TSSocketMessageFailure)failure failure:(TSSocketMessageFailure)failure
{ {
[[self webSocketOfType:webSocketType] makeRequest:request success:success failure:failure]; [self.websocket makeRequest:request success:success failure:failure];
} }
- (void)requestSocketOpen - (void)requestSocketOpen
{ {
[self.websocketDefault requestSocketOpen]; [self.websocket requestSocketOpen];
[self.websocketUD requestSocketOpen];
} }
- (void)cycleSocket - (void)cycleSocket
{ {
[self.websocketDefault cycleSocket]; [self.websocket cycleSocket];
[self.websocketUD cycleSocket];
} }
- (OWSWebSocketState)highestSocketState - (OWSWebSocketState)highestSocketState
{ {
if (self.websocketDefault.state == OWSWebSocketStateOpen || self.websocketUD.state == OWSWebSocketStateOpen) { return self.websocket.state;
return OWSWebSocketStateOpen;
} else if (self.websocketDefault.state == OWSWebSocketStateConnecting
|| self.websocketUD.state == OWSWebSocketStateConnecting) {
return OWSWebSocketStateConnecting;
} else {
return OWSWebSocketStateClosed;
}
} }
@end @end

Loading…
Cancel
Save