Home

Awesome

EventCore

This is a high-performance native event loop abstraction for D, focused on asynchronous I/O and GUI message integration. The API is callback (delegate) based. For a higher level fiber based abstraction, take a look at vibe.d.

The API documentation is part of vibe.d:

DUB Package Posix and Windows Build Status

Supported drivers and operating systems

DriverLinuxWindowsmacOSFreeBSDAndroidiOS
SelectEventDriveryesyesyesyes¹yesyes
EpollEventDriveryesyes
WinAPIEventDriveryes
KqueueEventDriveryesyes¹yes
CFRunloopEventDriveryesyes
LibasyncEventDriver—¹—¹—¹—¹

¹ planned, but not currenly implemented

Supported compilers

The following compilers are tested and supported:

Driver development status

Feature \ EventDriverSelectEpollWinAPIKqueueCFRunloopLibasync
TCP Socketsyesyesyesyesyes
UDP Socketsyesyesyesyesyes
USDSyesyesyesyes
DNSyesyesyesyesyes
Timersyesyesyesyesyes
Eventsyesyesyesyesyes
Unix Signalsyes²yes
Filesyesyesyesyesyes
UI Integrationyes¹yes¹yesyes¹yes¹
File watcheryes²yesyesyes²yes²
Pipesyesyesyesyes
Processesyesyesyesyes

¹ Manually, by adopting the X11 display connection socket

² Systems other than Linux use a polling implementation

Compile-time configuration

Configurations

The DUB configuration meachnism can be used to force choosing a particular event driver implementation. The following configurations are available:

EventcoreCFRunLoopDriver: Forces using the CFRunLoop driver (for DUB, use the "cfrunloop" configuration instead) EventcoreKqueueDriver: Forces using the kqueue driver (for DUB, use the "kqueue" configuration instead) EventcoreWinAPIDriver: Forces using the WinAPI driver (for DUB, use the "winapi" configuration instead) EventcoreLibasyncDriver: Forces using the libasync driver (for DUB, use the "libasync" configuration instead) EventcoreSelectDriver: Forces using the select driver (for DUB, use the "select" configuration instead) EventcoreUseGAIA: Forces using getaddressinfo_a for the epoll driver (for DUB, use the "epoll-gaia" configuration instead)

Version identifiers

Several version identifiers can be set to configure the behavior of the library at compile time. Simply insert any of the following identifiers as a "version" to the compiler command line or into your DUB recipe:

dub.sdl:

versions "EventCoreSilenceLeakWarnings"

dub.json:

{
	...
	"versions": ["EventCoreSilenceLeakWarnings"]
	...
}

Debug identifiers

For additional debug output, the following debug identifiers are available. When building with DUB, you can specify them similar to version identifiers, but using the debugVersions directive instead:

Open questions