我想实现某种配置管理器守护程序,它也用作XPCService
以下接口 registerConfigProtocol。
@protocol registerConfigProtocol
-(void) registerConfigWithHandler:(id<setConfigureProtocol>)handler;
@end
协议方法上的处理程序参数应该是一个实现的代理类,setConfigureProtocol
它将在 xpc 客户端中实现,这是接口:
@protocol setConfigureProtocol
-(void)setConfig:(NSString *)filePath withReply:(void (^)(NSError *error)) reply;
@end
当配置管理器决定新的配置文件可供客户端使用时,它将启动对setConfig
上面的远程调用,该调用是处理程序实例中的一个方法。该调用预计将在客户端运行,该客户端是此新配置的消费者)。
所以我的目标是把它变成(id<setConfigureProtocol>)handler
一个代理对象,我可以在新配置可用的异步事件上使用它。
我阅读了以下 API:
- (void)setInterface:(NSXPCInterface *)ifc
forSelector:(SEL)sel
argumentIndex:(NSUInteger)arg
ofReply:(BOOL)ofReply;
所以我在服务器 xpc 端做了这样的事情。据我了解,它应该使registerConfigWithHandler
协议中方法的第一个参数configSetDelegateInterface
是处理程序,一个代理对象。
NSXPCInterface *configRegisterInterface =
[NSXPCInterface interfaceWithProtocol:@protocol(configRegisterProtocol)];
NSXPCInterface *configSetDelegateInterface =
[NSXPCInterface interfaceWithProtocol:@protocol(setConfigureProtocol)];
[configRegisterInterface setInterface:configSetDelegateInterface
forSelector:@selector(registerConfigWithHandler:)
argumentIndex:0
ofReply:NO];
所以现在我可以简单地从服务器端调用处理程序方法,以触发客户端每次可用时重新加载新配置?registerConfigWithHandler
只要我希望服务器发起对客户端的调用,我就应该不返回吗?
谢谢 !