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.model.ISelector; import tango.io.SocketConduit; import tango.io.Stdout; ISelector selector; SocketConduit conduit1; SocketConduit conduit2; MyClass object1; MyClass object2; int eventCount; // Initialize the selector assuming that it will deal with 2 conduits and // will receive 2 events per invocation to the select() method. selector.open(2, 2); selector.register(conduit, Event.Read, object1); selector.register(conduit, 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.print("Sent 'MESSAGE' to peer\n"); 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 | value that provides a hint for the maximum amount of conduits that will be registered |
maxEvents | value that provides a hint for the maximum amount of conduit events that will be returned in the selection set per call to select. |
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 |
Examples:
Parameters:
conduit | conduit that had been previously associated to the selector; it can be null. |
Remarks:
Returns:
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:
Note:
Note:
1 | select(TimeSpan.interval(timeout)); |
Parameters:
timeout | the maximum amount of time in seconds 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:
Remarks:
Remarks: