Split up EventDriver interface into individual sub interfaces.

This commit is contained in:
Sönke Ludwig 2016-10-05 04:21:24 +02:00
parent 021f918236
commit e3c4af8433
4 changed files with 134 additions and 98 deletions

View file

@ -83,13 +83,13 @@ struct StreamConnectionImpl {
~this()
nothrow {
if (m_socket != StreamSocketFD.invalid)
eventDriver.releaseRef(m_socket);
eventDriver.sockets.releaseRef(m_socket);
}
@property bool empty()
{
reader.start();
eventDriver.waitSocketData(m_socket, &onData);
eventDriver.sockets.waitSocketData(m_socket, &onData);
reader.wait();
return m_empty;
}
@ -98,7 +98,7 @@ struct StreamConnectionImpl {
{
reader.start();
if (m_readBufferFill >= 2) onReadLineData(m_socket, IOStatus.ok, 0);
else eventDriver.readSocket(m_socket, m_readBuffer[m_readBufferFill .. $], IOMode.once, &onReadLineData);
else eventDriver.sockets.readSocket(m_socket, m_readBuffer[m_readBufferFill .. $], IOMode.once, &onReadLineData);
reader.wait();
auto ln = m_line;
m_line = null;
@ -108,13 +108,13 @@ struct StreamConnectionImpl {
void write(const(ubyte)[] data)
{
writer.start();
eventDriver.writeSocket(m_socket, data, IOMode.all, &onWrite);
eventDriver.sockets.writeSocket(m_socket, data, IOMode.all, &onWrite);
writer.wait();
}
void close()
nothrow {
eventDriver.releaseRef(m_socket);
eventDriver.sockets.releaseRef(m_socket);
m_socket = StreamSocketFD.invalid;
m_readBuffer = null;
}
@ -159,7 +159,7 @@ struct StreamConnectionImpl {
reader.finish();
} else if (m_readBuffer.length - m_readBufferFill > 0) {
eventDriver.readSocket(m_socket, m_readBuffer[m_readBufferFill .. $], IOMode.once, &onReadLineData);
eventDriver.sockets.readSocket(m_socket, m_readBuffer[m_readBufferFill .. $], IOMode.once, &onReadLineData);
} else {
reader.finish(exh);
}
@ -171,16 +171,16 @@ void main()
{
print("Starting up...");
auto addr = new InternetAddress("127.0.0.1", 8080);
auto listener = eventDriver.listenStream(addr, toDelegate(&onClientConnect));
auto listener = eventDriver.sockets.listenStream(addr, toDelegate(&onClientConnect));
enforce(listener != StreamListenSocketFD.invalid, "Failed to listen for connections.");
/*import core.time : msecs;
eventDriver.setTimer(eventDriver.createTimer((tm) { print("timer 1"); }), 1000.msecs, 1000.msecs);
eventDriver.setTimer(eventDriver.createTimer((tm) { print("timer 2"); }), 250.msecs, 500.msecs);*/
eventDriver.setTimer(eventDriver.timers.createTimer((tm) { print("timer 1"); }), 1000.msecs, 1000.msecs);
eventDriver.setTimer(eventDriver.timers.createTimer((tm) { print("timer 2"); }), 250.msecs, 500.msecs);*/
print("Listening for requests on port 8080...");
while (eventDriver.waiterCount)
eventDriver.processEvents();
while (eventDriver.core.waiterCount)
eventDriver.core.processEvents();
}
void onClientConnect(StreamListenSocketFD listener, StreamSocketFD client)

View file

@ -9,12 +9,12 @@ void main()
{
print("Starting up...");
auto addr = new InternetAddress("127.0.0.1", 8080);
auto listener = eventDriver.listenStream(addr, toDelegate(&onClientConnect));
auto listener = eventDriver.sockets.listenStream(addr, toDelegate(&onClientConnect));
enforce(listener != StreamListenSocketFD.invalid, "Failed to listen for connections.");
print("Listening for requests on port 8080...");
while (eventDriver.waiterCount)
eventDriver.processEvents();
while (eventDriver.core.waiterCount)
eventDriver.core.processEvents();
}
void onClientConnect(StreamListenSocketFD listener, StreamSocketFD client)
@ -49,7 +49,7 @@ struct ClientHandler {
{
onLine = on_line;
if (linefill >= 2) onReadData(client, IOStatus.ok, 0);
else eventDriver.readSocket(client, linebuf[linefill .. $], IOMode.once, &onReadData);
else eventDriver.sockets.readSocket(client, linebuf[linefill .. $], IOMode.once, &onReadData);
}
void onRequestLine(ubyte[] ln)
@ -57,8 +57,8 @@ struct ClientHandler {
//print("Request: %s", cast(char[])ln);
if (ln.length == 0) {
//print("Error: empty request line");
eventDriver.shutdownSocket(client);
eventDriver.releaseRef(client);
eventDriver.sockets.shutdownSocket(client);
eventDriver.sockets.releaseRef(client);
}
readLine(&onHeaderLine);
@ -68,7 +68,7 @@ struct ClientHandler {
{
if (ln.length == 0) {
auto reply = cast(const(ubyte)[])"HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 13\r\nKeep-Alive: timeout=10\r\n\r\nHello, World!";
eventDriver.writeSocket(client, reply, IOMode.all, &onWriteFinished);
eventDriver.sockets.writeSocket(client, reply, IOMode.all, &onWriteFinished);
} else readLine(&onHeaderLine);
}
@ -83,8 +83,8 @@ struct ClientHandler {
if (status != IOStatus.ok) {
print("Client disconnect");
eventDriver.shutdownSocket(client);
eventDriver.releaseRef(client);
eventDriver.sockets.shutdownSocket(client);
eventDriver.sockets.releaseRef(client);
return;
}
@ -101,12 +101,12 @@ struct ClientHandler {
onLine(linebuf[linefill + idx + 2 .. linefill + idx + 2 + idx]);
} else if (linebuf.length - linefill > 0) {
eventDriver.readSocket(client, linebuf[linefill .. $], IOMode.once, &onReadData);
eventDriver.sockets.readSocket(client, linebuf[linefill .. $], IOMode.once, &onReadData);
} else {
// ERROR: header line too long
print("Header line too long");
eventDriver.shutdownSocket(client);
eventDriver.releaseRef(client);
eventDriver.sockets.shutdownSocket(client);
eventDriver.sockets.releaseRef(client);
}
}
}