1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
//
// TestConnectionManager.m
// SmartDeviceLink-iOS
//
// Created by Joel Fischer on 11/6/15.
// Copyright © 2015 smartdevicelink. All rights reserved.
//
#import "TestConnectionManager.h"
#import "SDLRPCRequest.h"
#import "SDLRPCResponse.h"
NS_ASSUME_NONNULL_BEGIN
@implementation TestConnectionManager
- (instancetype)init {
self = [super init];
if (!self) {
return nil;
}
_receivedRequests = [NSMutableArray<__kindof SDLRPCMessage *> array];
return self;
}
- (void)sendConnectionRequest:(__kindof SDLRPCMessage *)request withResponseHandler:(nullable SDLResponseHandler)handler {
self.lastRequestBlock = handler;
if ([request isKindOfClass:SDLRPCRequest.class]) {
SDLRPCRequest *requestRPC = (SDLRPCRequest *)request;
requestRPC.correlationID = [self test_nextCorrelationID];
[self.receivedRequests addObject:requestRPC];
} else {
[self.receivedRequests addObject:request];
}
}
- (void)sendConnectionManagerRequest:(__kindof SDLRPCRequest *)request withResponseHandler:(nullable SDLResponseHandler)handler {
[self sendConnectionRequest:request withResponseHandler:handler];
}
- (void)sendRequests:(nonnull NSArray<SDLRPCRequest *> *)requests progressHandler:(nullable SDLMultipleAsyncRequestProgressHandler)progressHandler completionHandler:(nullable SDLMultipleRequestCompletionHandler)completionHandler {
[requests enumerateObjectsUsingBlock:^(SDLRPCRequest * _Nonnull request, NSUInteger idx, BOOL * _Nonnull stop) {
[self sendConnectionRequest:request withResponseHandler:nil];
if (progressHandler != nil) {
progressHandler(request, nil, nil, (double)idx / (double)requests.count);
}
}];
_lastMultipleCompletionBlock = completionHandler;
}
- (void)sendSequentialRequests:(nonnull NSArray<SDLRPCRequest *> *)requests progressHandler:(nullable SDLMultipleSequentialRequestProgressHandler)progressHandler completionHandler:(nullable SDLMultipleRequestCompletionHandler)completionHandler {
[requests enumerateObjectsUsingBlock:^(SDLRPCRequest * _Nonnull request, NSUInteger idx, BOOL * _Nonnull stop) {
[self sendConnectionRequest:request withResponseHandler:nil];
progressHandler(request, nil, nil, (double)idx / (double)requests.count);
}];
_lastMultipleCompletionBlock = completionHandler;
}
- (void)respondToLastRequestWithResponse:(__kindof SDLRPCResponse *)response {
[self respondToLastRequestWithResponse:response error:nil];
}
- (void)respondToLastRequestWithResponse:(__kindof SDLRPCResponse *)response error:(nullable NSError *)error {
NSError *thisError = nil;
if (!response.success.boolValue && error == nil) {
thisError = self.defaultError;
} else if (error != nil) {
thisError = error;
}
if (self.lastRequestBlock != nil) {
self.lastRequestBlock(self.receivedRequests.lastObject, response, thisError);
} else {
@throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Attempted to respond to last request, but there was no last request block" userInfo:nil];
}
}
- (void)respondToRequestWithResponse:(__kindof SDLRPCResponse *)response requestNumber:(NSInteger)requestNumber error:(nullable NSError *)error {
NSError *thisError = nil;
if (!response.success.boolValue && error == nil) {
thisError = self.defaultError;
} else if (error != nil) {
thisError = error;
}
if (self.lastRequestBlock != nil) {
self.lastRequestBlock(self.receivedRequests[requestNumber], response, thisError);
} else {
@throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Attempted to respond to last request, but there was no last request block" userInfo:nil];
}
}
- (void)respondToLastMultipleRequestsWithSuccess:(BOOL)success {
if (self.lastMultipleCompletionBlock != nil) {
self.lastMultipleCompletionBlock(success);
}
}
- (void)reset {
_receivedRequests = [NSMutableArray<__kindof SDLRPCMessage *> array];
_lastRequestBlock = nil;
}
#pragma mark - Getters
- (NSError *)defaultError {
return [NSError errorWithDomain:@"com.sdl.testConnectionManager" code:-1 userInfo:nil];
}
#pragma mark Private helpers
- (NSNumber *)test_nextCorrelationID {
static NSUInteger correlationID = 0;
return @(correlationID++);
}
@end
NS_ASSUME_NONNULL_END
|