License:
Author:
See Also:
Examples:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | import tango.io.selector.EpollSelector; import tango.net.device.Socket; import tango.io.Stdout; SocketConduit conduit1; SocketConduit conduit2; EpollSelector selector = new EpollSelector(); MyClass object1 = new MyClass(); MyClass object2 = new MyClass(); uint eventCount; // Initialize the selector assuming that it will deal with 10 conduits and // will receive 3 events per invocation to the select() method. selector.open(10, 3); selector.register(conduit1, Event.Read, object1); selector.register(conduit2, Event.Write, object2); eventCount = selector.select(); if (eventCount > 0) { char[16] buffer; int count; foreach (SelectionKey key; selector.selectedSet()) { if (key.isReadable()) { count = (cast(SocketConduit) key.conduit).read(buffer); if (count != IConduit.Eof) { Stdout.format("Received '{0}' from peer\n", buffer[0..count]); selector.register(key.conduit, Event.Write, key.attachment); } else { selector.unregister(key.conduit); key.conduit.close(); } } if (key.isWritable()) { count = (cast(SocketConduit) key.conduit).write("MESSAGE"); if (count != IConduit.Eof) { Stdout("Sent 'MESSAGE' to peer"); selector.register(key.conduit, Event.Read, key.attachment); } else { selector.unregister(key.conduit); key.conduit.close(); } } if (key.isError() || key.isHangup() || key.isInvalidHandle()) { selector.unregister(key.conduit); key.conduit.close(); } } } selector.close(); |
Parameters:
size | maximum amount of conduits that will be registered; it will grow dynamically if needed. |
maxEvents | maximum amount of conduit events that will be returned in the selection set per call to select(); this limit is enforced by this selector. |
Throws:
Remarks:
Parameters:
conduit | conduit that will be associated to the selector; must be a valid conduit (i.e. not null and open). |
events | bit mask of Event values that represent the events that will be tracked for the conduit. |
attachment | optional object with application-specific data that will be available when an event is triggered for the conduit |
Throws:
Examples:
1 | selector.register(conduit, Event.Read | Event.Write, object); |
Parameters:
conduit | conduit that had been previously associated to the selector; it can be null. |
Remarks:
Throws:
Parameters:
timeout | TimeSpan with the maximum amount of time that the selector will wait for events from the conduits; the amount of time is relative to the current system time (i.e. just the number of milliseconds that the selector has to wait for the events). |
Returns:
Throws:
See Also:
Remarks:
Remarks: