设计具有双向通信通道的 XPC 服务

问题描述

我想实现某种配置管理器守护进程,它也用作以下接口 registerConfigProtocol 的 xpcService

@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 返回吗?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...