私はココアアプリを書いています。アプリケーションにはソケットがあり、ソケットが読み取り可能になるたびに、ソケットからデータを読み取り、データを処理し、それに応じてユーザー インターフェイスを更新したいと考えています。読み取りイベント チェックをメイン ループに統合したい。つまり、ソケットをメイン ループに接続し、ソケットが読み取り可能になるたびにメイン ループがコールバックを呼び出すようにしたい。
テスト アプリケーションを作成しましたが、何らかの理由で動作しません。
#include <stdio.h>
#include <Foundation/NSAutoReleasePool.h>
#include <Foundation/NSRunLoop.h>
#include <Foundation/NSPort.h>
@interface MyDelegate : NSObject <NSPortDelegate> {
}
- (void)handlePortMessage:(NSPortMessage *)portMessage;
@end
@implementation MyDelegate
- (void)handlePortMessage:(NSPortMessage *)portMessage {
printf("Haiz\n");
}
@end
int
main() {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSSocketPort *server = [NSSocketPort alloc];
MyDelegate *foo = [MyDelegate alloc];
[server initWithTCPPort: 1234];
[server setDelegate: foo];
[[NSRunLoop mainRunLoop] addPort: server forMode: NSDefaultRunLoopMode];
[[NSRunLoop mainRunLoop] run];
[pool release];
return 0;
}
アプリは localhost ポート 1234 でリッスンすることになっており、誰かがサーバーに接続したりサーバーにデータを送信したりするたびに、アプリはコンソールに "Haiz" を出力することになっています。ただし、アプリはまったく何もしません。ソケットが作成され、ポート 1234 に telnet できますが、アプリはコンソールに何も出力しません。
私は何を間違っていますか?