diff --git a/Examples/first-server.m b/Examples/first-server.m index aeff2f6cc..0fe778cd6 100644 --- a/Examples/first-server.m +++ b/Examples/first-server.m @@ -2,6 +2,43 @@ #include #include "first-server.h" #include +#include +#include + + +@interface MyIo: NSObject +{ + id runLoop; + id mode; + char c; +} +- initForRunLoop: r andMode: m; +- (void) readyForReadingOnFileDescriptor: (int)fd; +- (void) readyForWritingOnFileDescriptor: (int)fd; +@end + +@implementation MyIo +- initForRunLoop: r andMode: m +{ + runLoop = r; + mode = m; + return self; +} +- (void) readyForReadingOnFileDescriptor: (int)fd +{ + if (read(fd, &c, 1) == 1) { + [runLoop addWriteDescriptor: 1 object: self forMode: mode]; + [runLoop removeReadDescriptor: fd forMode: mode]; + } +} +- (void) readyForWritingOnFileDescriptor: (int)fd +{ + if (write(fd, &c, 1) == 1) { + [runLoop addReadDescriptor: 0 object: self forMode: mode]; + [runLoop removeWriteDescriptor: fd forMode: mode]; + } +} +@end @implementation FirstServer - sayHiTo: (char *)name @@ -14,6 +51,15 @@ int main() { id s, c; + MyIo* myIo; + NSString* m; + id r; + + r = [RunLoop currentInstance]; + m = [RunLoop currentMode]; + myIo = [[MyIo alloc] initForRunLoop: r andMode: m]; + + [r addReadDescriptor: 0 object: myIo forMode: m]; /* Create our server object */ s = [[FirstServer alloc] init];