Async read/write procedures no longer replace each other in upcoming asyncdispatch

This commit is contained in:
Ruslan Mustakov 2016-09-02 19:15:59 +07:00
commit b676a08b3a

View file

@ -1368,19 +1368,25 @@ else:
proc addRead*(fd: AsyncFD, cb: Callback) = proc addRead*(fd: AsyncFD, cb: Callback) =
let p = getGlobalDispatcher() let p = getGlobalDispatcher()
var newEvents = {Event.Read}
withData(p.selector, fd.SocketHandle, adata) do: withData(p.selector, fd.SocketHandle, adata) do:
adata.readCB = cb adata.readCB = cb
if adata.writeCB != nil:
newEvents.incl(Event.Write)
do: do:
raise newException(ValueError, "File descriptor not registered.") raise newException(ValueError, "File descriptor not registered.")
p.selector.updateHandle(fd.SocketHandle, {Event.Read}) p.selector.updateHandle(fd.SocketHandle, newEvents)
proc addWrite*(fd: AsyncFD, cb: Callback) = proc addWrite*(fd: AsyncFD, cb: Callback) =
let p = getGlobalDispatcher() let p = getGlobalDispatcher()
var newEvents = {Event.Write}
withData(p.selector, fd.SocketHandle, adata) do: withData(p.selector, fd.SocketHandle, adata) do:
adata.writeCB = cb adata.writeCB = cb
if adata.readCB != nil:
newEvents.incl(Event.Read)
do: do:
raise newException(ValueError, "File descriptor not registered.") raise newException(ValueError, "File descriptor not registered.")
p.selector.updateHandle(fd.SocketHandle, {Event.Write}) p.selector.updateHandle(fd.SocketHandle, newEvents)
proc poll*(timeout = 500) = proc poll*(timeout = 500) =
var keys: array[64, ReadyKey[AsyncData]] var keys: array[64, ReadyKey[AsyncData]]