mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
Added test of RunLoop FD listening.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@1891 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
b97d78de17
commit
1071eaffa0
1 changed files with 46 additions and 0 deletions
|
@ -2,6 +2,43 @@
|
|||
#include <gnustep/base/Connection.h>
|
||||
#include "first-server.h"
|
||||
#include <gnustep/base/String.h>
|
||||
#include <gnustep/base/RunLoop.h>
|
||||
#include <sys/file.h>
|
||||
|
||||
|
||||
@interface MyIo: NSObject <FdListening,FdSpeaking>
|
||||
{
|
||||
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];
|
||||
|
|
Loading…
Reference in a new issue