Use REST for UD requests.

pull/1/head
Matthew Chen 7 years ago
parent 16aec33e24
commit b865b91147

@ -137,6 +137,11 @@ NS_ASSUME_NONNULL_BEGIN
[Environment.shared.contactsManager requestSystemContactsOnce]; [Environment.shared.contactsManager requestSystemContactsOnce];
}]]; }]];
[items addObject:[OWSTableItem itemWithTitle:@"Cycle websockets"
actionBlock:^() {
[SSKEnvironment.shared.socketManager cycleSocket];
}]];
return [OWSTableSection sectionWithTitle:self.name items:items]; return [OWSTableSection sectionWithTitle:self.name items:items];
} }

@ -1102,8 +1102,10 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
[[requestMaker makeRequestObjc] [[requestMaker makeRequestObjc]
.then(^(OWSRequestMakerResult *result) { .then(^(OWSRequestMakerResult *result) {
dispatch_async([OWSDispatch sendingQueue], ^{ dispatch_async([OWSDispatch sendingQueue], ^{
const BOOL wasSentByUD = result.wasSentByUD; [self messageSendDidSucceed:messageSend
[self messageSendDidSucceed:messageSend deviceMessages:deviceMessages wasSentByUD:wasSentByUD]; deviceMessages:deviceMessages
wasSentByUD:result.wasSentByUD
wasSentByWebsocket:result.wasSentByWebsocket];
}); });
}) })
.catch(^(NSError *error) { .catch(^(NSError *error) {
@ -1139,13 +1141,15 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
- (void)messageSendDidSucceed:(OWSMessageSend *)messageSend - (void)messageSendDidSucceed:(OWSMessageSend *)messageSend
deviceMessages:(NSArray<NSDictionary *> *)deviceMessages deviceMessages:(NSArray<NSDictionary *> *)deviceMessages
wasSentByUD:(BOOL)wasSentByUD { wasSentByUD:(BOOL)wasSentByUD
wasSentByWebsocket:(BOOL)wasSentByWebsocket
{
OWSAssertDebug(messageSend); OWSAssertDebug(messageSend);
OWSAssertDebug(deviceMessages); OWSAssertDebug(deviceMessages);
SignalRecipient *recipient = messageSend.recipient; SignalRecipient *recipient = messageSend.recipient;
OWSLogInfo(@"Message send succeeded (wasSentByUD: %d).", wasSentByUD); OWSLogInfo(@"Message send succeeded; wasSentByUD: %d, wasSentByWebsocket: %d.", wasSentByUD, wasSentByWebsocket);
if (messageSend.isLocalNumber && deviceMessages.count == 0) { if (messageSend.isLocalNumber && deviceMessages.count == 0) {
OWSLogInfo(@"Sent a message with no device messages; clearing 'mayHaveLinkedDevices'."); OWSLogInfo(@"Sent a message with no device messages; clearing 'mayHaveLinkedDevices'.");

@ -23,11 +23,16 @@ public class RequestMakerResult: NSObject {
@objc @objc
public let wasSentByUD: Bool public let wasSentByUD: Bool
@objc
public let wasSentByWebsocket: Bool
@objc @objc
public init(responseObject: Any?, public init(responseObject: Any?,
wasSentByUD: Bool) { wasSentByUD: Bool,
wasSentByWebsocket: Bool) {
self.responseObject = responseObject self.responseObject = responseObject
self.wasSentByUD = wasSentByUD self.wasSentByUD = wasSentByUD
self.wasSentByWebsocket = wasSentByWebsocket
} }
} }
@ -115,7 +120,7 @@ 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 webSocketType: OWSWebSocketType = (isUDRequest ? .UD : .default)
let canMakeWebsocketRequests = (socketManager.canMakeRequests(of: webSocketType) && !skipWebsocket) let canMakeWebsocketRequests = (socketManager.canMakeRequests(of: webSocketType) && !skipWebsocket && !isUDRequest)
if canMakeWebsocketRequests { if canMakeWebsocketRequests {
return Promise { resolver in return Promise { resolver in
@ -130,7 +135,9 @@ public class RequestMaker: NSObject {
self.requestSucceeded(udAccess: udAccessForRequest) self.requestSucceeded(udAccess: udAccessForRequest)
resolver.fulfill(RequestMakerResult(responseObject: responseObject, wasSentByUD: isUDRequest)) resolver.fulfill(RequestMakerResult(responseObject: responseObject,
wasSentByUD: isUDRequest,
wasSentByWebsocket: true))
}) { (statusCode: Int, responseData: Data?, error: Error) in }) { (statusCode: Int, responseData: Data?, error: Error) in
resolver.reject(RequestMakerError.websocketRequestError(statusCode: statusCode, responseData: responseData, underlyingError: error)) resolver.reject(RequestMakerError.websocketRequestError(statusCode: statusCode, responseData: responseData, underlyingError: error))
} }
@ -179,7 +186,9 @@ public class RequestMaker: NSObject {
self.requestSucceeded(udAccess: udAccessForRequest) self.requestSucceeded(udAccess: udAccessForRequest)
// Unwrap the network manager promise into a request maker promise. // Unwrap the network manager promise into a request maker promise.
return RequestMakerResult(responseObject: networkManagerResult.responseObject, wasSentByUD: isUDRequest) return RequestMakerResult(responseObject: networkManagerResult.responseObject,
wasSentByUD: isUDRequest,
wasSentByWebsocket: false)
}.recover { (error: Error) -> Promise<RequestMakerResult> in }.recover { (error: Error) -> Promise<RequestMakerResult> in
switch error { switch error {
case NetworkManagerError.taskError(let task, _): case NetworkManagerError.taskError(let task, _):

Loading…
Cancel
Save