0

我想实现某种配置管理器守护程序,它也用作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只要我希望服务器发起对客户端的调用,我就应该不返回吗?

谢谢 !

4

0 回答 0