Merge pull request #159 from vibe-d/waitfordataex
Add TCPConnection.waitForDataEx
This commit is contained in:
commit
1d917568e5
2
dub.sdl
2
dub.sdl
|
@ -4,7 +4,7 @@ authors "Sönke Ludwig"
|
||||||
copyright "Copyright © 2016-2018, rejectedsoftware e.K."
|
copyright "Copyright © 2016-2018, rejectedsoftware e.K."
|
||||||
license "MIT"
|
license "MIT"
|
||||||
|
|
||||||
dependency "eventcore" version="~>0.8.40"
|
dependency "eventcore" version="~>0.8.43"
|
||||||
dependency "stdx-allocator" version="~>2.77.0"
|
dependency "stdx-allocator" version="~>2.77.0"
|
||||||
|
|
||||||
targetName "vibe_core"
|
targetName "vibe_core"
|
||||||
|
|
|
@ -568,10 +568,15 @@ struct TCPConnection {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool waitForData(Duration timeout = Duration.max)
|
bool waitForData(Duration timeout = Duration.max)
|
||||||
|
{
|
||||||
|
return waitForDataEx(timeout) == WaitForDataStatus.dataAvailable;
|
||||||
|
}
|
||||||
|
|
||||||
|
WaitForDataStatus waitForDataEx(Duration timeout = Duration.max)
|
||||||
{
|
{
|
||||||
mixin(tracer);
|
mixin(tracer);
|
||||||
if (!m_context) return false;
|
if (!m_context) return WaitForDataStatus.noMoreData;
|
||||||
if (m_context.readBuffer.length > 0) return true;
|
if (m_context.readBuffer.length > 0) return WaitForDataStatus.dataAvailable;
|
||||||
auto mode = timeout <= 0.seconds ? IOMode.immediate : IOMode.once;
|
auto mode = timeout <= 0.seconds ? IOMode.immediate : IOMode.once;
|
||||||
|
|
||||||
bool cancelled;
|
bool cancelled;
|
||||||
|
@ -592,7 +597,8 @@ mixin(tracer);
|
||||||
|
|
||||||
asyncAwaitAny!(true, waiter)(timeout);
|
asyncAwaitAny!(true, waiter)(timeout);
|
||||||
|
|
||||||
if (cancelled || !m_context) return false;
|
if (!m_context) return WaitForDataStatus.noMoreData;
|
||||||
|
if (cancelled) return WaitForDataStatus.timeout;
|
||||||
|
|
||||||
logTrace("Socket %s, read %s bytes: %s", m_socket, nbytes, status);
|
logTrace("Socket %s, read %s bytes: %s", m_socket, nbytes, status);
|
||||||
|
|
||||||
|
@ -607,9 +613,10 @@ mixin(tracer);
|
||||||
case IOStatus.disconnected: break;
|
case IOStatus.disconnected: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_context.readBuffer.length > 0;
|
return m_context.readBuffer.length > 0 ? WaitForDataStatus.dataAvailable : WaitForDataStatus.noMoreData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Waits asynchronously for new data to arrive.
|
/** Waits asynchronously for new data to arrive.
|
||||||
|
|
||||||
This function can be used to detach the `TCPConnection` from a
|
This function can be used to detach the `TCPConnection` from a
|
||||||
|
@ -808,6 +815,12 @@ enum WaitForDataAsyncStatus {
|
||||||
waiting,
|
waiting,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum WaitForDataStatus {
|
||||||
|
dataAvailable,
|
||||||
|
noMoreData,
|
||||||
|
timeout
|
||||||
|
}
|
||||||
|
|
||||||
unittest { // test compilation of callback with scoped destruction
|
unittest { // test compilation of callback with scoped destruction
|
||||||
static struct CB {
|
static struct CB {
|
||||||
~this() {}
|
~this() {}
|
||||||
|
|
Loading…
Reference in a new issue