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:(无论什么*)请求

我为此打开了一个