tango.io.selector.SelectSelector

License:
BSD style:

author:
Juan Jose Comellas

class SelectSelector: tango.io.selector.AbstractSelector.AbstractSelector;
Selector that uses the select() system call to receive I/O events for the registered conduits. To use this class you would normally do something like this:

Examples:
 import tango.io.selector.SelectSelector;

 Socket socket;
 ISelector selector = new SelectSelector();

 selector.open(100, 10);

 // Register to read from socket
 selector.register(socket, Event.Read);

 int eventCount = selector.select(0.1); // 0.1 seconds
 if (eventCount > 0)
 {
     // We can now read from the socket
     socket.read();
 }
 else if (eventCount == 0)
 {
     // Timeout
 }
 else if (eventCount == -1)
 {
     // Another thread called the wakeup() method.
 }
 else
 {
     // Error: should never happen.
 }

 selector.close();


alias select;
Alias for the select() method as we're not reimplementing it in this class.

const uint DefaultSize;
Default number of SelectionKey's that will be handled by the SelectSelector.

void open(uint size = DefaultSize, uint maxEvents = DefaultSize);
Open the select()-based selector.

Params:
uint size maximum amount of conduits that will be registered; it will grow dynamically if needed.
uint maxEvents maximum amount of conduit events that will be returned in the selection set per call to select(); this value is currently not used by this selector.

void close();
Close the selector.

Remarks:
It can be called multiple times without harmful side-effects.

void register(ISelectable conduit, Event events, Object attachment = null);
Associate a conduit to the selector and track specific I/O events. If a conduit is already associated with the selector, the events and attachment are upated.

Params:
ISelectable conduit conduit that will be associated to the selector; must be a valid conduit (i.e. not null and open).
Event events bit mask of Event values that represent the events that will be tracked for the conduit.
Object attachment optional object with application-specific data that will be available when an event is triggered for the conduit

Throws:
RegisteredConduitException if the conduit had already been registered to the selector.

Examples:
 selector.register(conduit, Event.Read | Event.Write, object);


void unregister(ISelectable conduit);
Remove a conduit from the selector.

Params:
ISelectable conduit conduit that had been previously associated to the selector; it can be null.

Remarks:
Unregistering a null conduit is allowed and no exception is thrown if this happens.

Throws:
UnregisteredConduitException if the conduit had not been previously registered to the selector.

int select(TimeSpan timeout);
Wait for I/O events from the registered conduits for a specified amount of time.

Params:
TimeSpan 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:
The amount of conduits that have received events; 0 if no conduits have received events within the specified timeout; and -1 if the wakeup() method has been called from another thread.

Throws:
InterruptedSystemCallException if the underlying system call was interrupted by a signal and the 'restartInterruptedSystemCall' property was set to false; SelectorException if there were no resources available to wait for events from the conduits.

ISelectionSet selectedSet();
Return the selection set resulting from the call to any of the select() methods.

Remarks:
If the call to select() was unsuccessful or it did not return any events, the returned value will be null.

SelectionKey key(ISelectable conduit);
Return the selection key resulting from the registration of a conduit to the selector.

Remarks:
If the conduit is not registered to the selector the returned value will be null. No exception will be thrown by this method.

size_t count();
Return the number of keys resulting from the registration of a conduit to the selector.

int opApply(scope int delegate(ref SelectionKey) dg);
Iterate through the currently registered selection keys. Note that you should not erase or add any items from the selector while iterating, although you can register existing conduits again.


Page generated by Ddoc. Copyright (c) 2006 Juan Jose Comellas. All rights reserved