Skip to content

Commit 0032cf5

Browse files
eDO Teammobile-devx-github-bot
authored andcommitted
Add -[EDOClientService isServiceAvailableOnPort].
isServiceAvailableOnPort checks if an EDOHostService is running in another process. PiperOrigin-RevId: 573894398
1 parent 184cc47 commit 0032cf5

2 files changed

Lines changed: 40 additions & 3 deletions

File tree

Service/Sources/EDOClientService.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,15 @@ EDOClientErrorHandler EDOSetClientErrorHandler(EDOClientErrorHandler _Nullable e
7676

7777
- (instancetype)init NS_UNAVAILABLE;
7878

79+
/**
80+
* Determines if an @c EDOHostService is listening on @c port.
81+
*
82+
* @param port The port to check if an @c EDOHostService is listening on.
83+
* @return @c YES if an @c EDOHostService is listening on @c port and it is safe to connect, @c NO
84+
* otherwise.
85+
*/
86+
+ (BOOL)isServiceAvailableOnPort:(UInt16)port;
87+
7988
#pragma mark - Deprecated APIs
8089

8190
/** Retrieve the root object from the given host port of a service. */

Service/Sources/EDOClientService.m

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,19 @@ + (EDOHostNamingService *)namingServiceWithDeviceSerial:(NSString *)serial error
146146
return nil;
147147
}
148148

149+
+ (BOOL)isServiceAvailableOnPort:(UInt16)port {
150+
EDOHostPort *hostPort = [EDOHostPort hostPortWithLocalPort:port];
151+
EDOServiceRequest *classRequest =
152+
[EDOClassRequest requestWithClassName:NSStringFromClass([NSObject class]) hostPort:hostPort];
153+
EDOHostService *service = [EDOHostService serviceForCurrentExecutingQueue];
154+
NSError *error = nil;
155+
[self sendSynchronousRequest:classRequest
156+
onPort:hostPort
157+
withExecutor:service.executor
158+
error:&error];
159+
return error == nil;
160+
}
161+
149162
#pragma mark - Private Category
150163

151164
+ (NSMapTable *)localDistantObjects {
@@ -235,6 +248,13 @@ + (EDOServiceResponse *)sendSynchronousRequest:(EDOServiceRequest *)request
235248
+ (EDOServiceResponse *)sendSynchronousRequest:(EDOServiceRequest *)request
236249
onPort:(EDOHostPort *)port
237250
withExecutor:(EDOExecutor *)executor {
251+
return [self sendSynchronousRequest:request onPort:port withExecutor:executor error:NULL];
252+
}
253+
254+
+ (EDOServiceResponse *)sendSynchronousRequest:(EDOServiceRequest *)request
255+
onPort:(EDOHostPort *)port
256+
withExecutor:(EDOExecutor *)executor
257+
error:(NSError **)errorOut {
238258
EDOClientServiceStatsCollector *stats = EDOClientServiceStatsCollector.sharedServiceStats;
239259

240260
int maxAttempts = 2;
@@ -257,7 +277,11 @@ + (EDOServiceResponse *)sendSynchronousRequest:(EDOServiceRequest *)request
257277
NSError *error = [NSError errorWithDomain:EDOServiceErrorDomain
258278
code:EDOServiceErrorCannotConnect
259279
userInfo:userInfo];
260-
gEDOClientErrorHandler(error);
280+
if (errorOut != NULL) {
281+
*errorOut = error;
282+
} else {
283+
gEDOClientErrorHandler(error);
284+
}
261285
return nil;
262286
}
263287

@@ -327,7 +351,11 @@ + (EDOServiceResponse *)sendSynchronousRequest:(EDOServiceRequest *)request
327351
NSError *error = [NSError errorWithDomain:EDOServiceErrorDomain
328352
code:EDOServiceErrorConnectTimeout
329353
userInfo:userInfo];
330-
gEDOClientErrorHandler(error);
354+
if (errorOut != NULL) {
355+
*errorOut = error;
356+
} else {
357+
gEDOClientErrorHandler(error);
358+
}
331359
return nil;
332360
}
333361

@@ -436,4 +464,4 @@ BOOL EDOIsRemoteObject(id object) {
436464
return objectClass == remoteObjectClass || objectClass == remoteBlockClass;
437465
}
438466

439-
void EDOExportEDOClientError(NSError *error) { gEDOClientErrorHandler(error); }
467+
void EDOExportEDOClientError(NSError *error) { gEDOClientErrorHandler(error); }

0 commit comments

Comments
 (0)