Objective c 使用自定义响应类向CocoaHTTPServer添加运行时信息
我有以下代码来启动我自己的。为了手动处理响应,我创建了名为Objective c 使用自定义响应类向CocoaHTTPServer添加运行时信息,objective-c,cocoa,http,cocoaasyncsocket,Objective C,Cocoa,Http,Cocoaasyncsocket,我有以下代码来启动我自己的。为了手动处理响应,我创建了名为PictureHTTPConnection self.httpServer = [[HTTPServer alloc]init]; self.httpServer.type = @"_http._tcp."; self.httpServer.name = @"MyBonjour Name"; self.httpServer.connectionClass = [PictureHTTPConnection class]; 这里的问题是Pi
PictureHTTPConnection
self.httpServer = [[HTTPServer alloc]init];
self.httpServer.type = @"_http._tcp.";
self.httpServer.name = @"MyBonjour Name";
self.httpServer.connectionClass = [PictureHTTPConnection class];
这里的问题是PictureHTTPConnection
类需要一些信息来处理HTTP连接。但是,我只提供类,因此没有对实例的引用。我可以用全球数据做一些事情,但这不是很好的编程实践
我能想到的最好的方法是将
PictureHTTPConnection
的委托设置为UIApplicationLegate
,以便它可以应答任何回调:-(我也遇到了同样的问题。为了解决这个问题,我更改了HTTPServer
类的代码,以便您可以将其设置为委托
,然后在创建的每个HTTPConnection
上设置该委托。当HTTPConnection
必须处理请求时,我调用该委托。这一点也不干净,我也不知道s正在寻找更好的解决方案。我也遇到了同样的问题。为了解决这个问题,我更改了HTTPServer
类的代码,以便您可以将其设置为delegate
,然后在创建的每个HTTPConnection
上设置。当HTTPConnection
必须处理请求时,我调用委托。这是还远远不够干净,我正在寻找更好的解决方案。您可以通过向HTTPServer添加一个获取和设置委托的类别来获取回调。objc_setAssociatedObject
是您的朋友:
@interface HTTPServer (WithDelegate)
@property (strong, nonatomic) id delegate;
@end
@implementation HTTPServer (WithDelegate)
NSString const *key = @"HttpServer.WithDelegate.key";
- (void)setDelegate:(id)delegate
{
objc_setAssociatedObject(self, &key, delegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (id)delegate
{
return objc_getAssociatedObject(self, &key);
}
@end
在初始化HTTPServer实例时(或在任何时候)设置委托。从自定义HTTPConnection实现对其调用方法,如下所示:
[config.server.delegate handleRequest:theRequest];
您必须在您的委托类中实现
handleRequest:(无论什么*)请求
您可以通过向HTTPServer添加一个获取和设置委托的类别来获取回调。objc\u setAssociatedObject
是您的朋友:
@interface HTTPServer (WithDelegate)
@property (strong, nonatomic) id delegate;
@end
@implementation HTTPServer (WithDelegate)
NSString const *key = @"HttpServer.WithDelegate.key";
- (void)setDelegate:(id)delegate
{
objc_setAssociatedObject(self, &key, delegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (id)delegate
{
return objc_getAssociatedObject(self, &key);
}
@end
在初始化HTTPServer实例时(或在任何时候)设置委托。从自定义HTTPConnection实现对其调用方法,如下所示:
[config.server.delegate handleRequest:theRequest];
您必须在委托类中实现handleRequest:(无论什么*)请求
我为此打开了一个