Add timer functionality
This commit is contained in:
@@ -31,3 +31,7 @@ private:
|
||||
void waitNeverDone(kj::WaitScope & scope) {
|
||||
kj::NEVER_DONE.wait(scope);
|
||||
}
|
||||
|
||||
kj::Timer * getTimer(kj::AsyncIoContext * context) {
|
||||
return &context->lowLevelProvider->getTimer();
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from .capnp.includes.capnp_cpp cimport Maybe, DynamicStruct, Request, PyPromise, VoidPromise, PyPromiseArray, RemotePromise, DynamicCapability, InterfaceSchema, EnumSchema, StructSchema, DynamicValue, Capability, RpcSystem, MessageBuilder, MessageReader, TwoPartyVatNetwork, PyRestorer, AnyPointer, DynamicStruct_Builder, WaitScope, AsyncIoContext, StringPtr, TaskSet
|
||||
from .capnp.includes.capnp_cpp cimport Maybe, DynamicStruct, Request, PyPromise, VoidPromise, PyPromiseArray, RemotePromise, DynamicCapability, InterfaceSchema, EnumSchema, StructSchema, DynamicValue, Capability, RpcSystem, MessageBuilder, MessageReader, TwoPartyVatNetwork, PyRestorer, AnyPointer, DynamicStruct_Builder, WaitScope, AsyncIoContext, StringPtr, TaskSet, Timer
|
||||
|
||||
from .capnp.includes.schema_cpp cimport ByteArray
|
||||
|
||||
@@ -38,3 +38,4 @@ cdef extern from "../helpers/serialize.h":
|
||||
|
||||
cdef extern from "../helpers/asyncHelper.h":
|
||||
void waitNeverDone(WaitScope&)
|
||||
Timer * getTimer(AsyncIoContext *)
|
||||
|
||||
@@ -100,6 +100,16 @@ cdef extern from "kj/array.h" namespace " ::kj":
|
||||
|
||||
ctypedef Promise[PyArray] PyPromiseArray
|
||||
|
||||
cdef extern from "kj/time.h" namespace " ::kj":
|
||||
cdef cppclass Duration:
|
||||
Duration(int64_t)
|
||||
# cdef cppclass TimePoint:
|
||||
# TimePoint(Duration)
|
||||
cdef cppclass Timer:
|
||||
# int64_t now()
|
||||
# VoidPromise atTime(TimePoint time)
|
||||
VoidPromise afterDelay(Duration delay)
|
||||
|
||||
cdef extern from "kj/async-io.h" namespace " ::kj":
|
||||
cdef cppclass AsyncIoStream:
|
||||
pass
|
||||
@@ -107,6 +117,7 @@ cdef extern from "kj/async-io.h" namespace " ::kj":
|
||||
# Own[AsyncInputStream] wrapInputFd(int)
|
||||
# Own[AsyncOutputStream] wrapOutputFd(int)
|
||||
Own[AsyncIoStream] wrapSocketFd(int)
|
||||
Timer& getTimer() except +reraise_kj_exception
|
||||
cdef cppclass AsyncIoProvider:
|
||||
pass
|
||||
cdef cppclass WaitScope:
|
||||
|
||||
@@ -1350,6 +1350,19 @@ cdef _EventLoop C_DEFAULT_EVENT_LOOP_GETTER():
|
||||
|
||||
raise RuntimeError("You don't have any EventLoops running. Please make sure to add one")
|
||||
|
||||
cdef class Timer:
|
||||
cdef capnp.Timer * thisptr
|
||||
|
||||
cdef _init(self, capnp.Timer * timer):
|
||||
self.thisptr = timer
|
||||
return self
|
||||
|
||||
cpdef after_delay(self, time):
|
||||
return _VoidPromise()._init(self.thisptr.afterDelay(capnp.Duration(time)))
|
||||
|
||||
def getTimer():
|
||||
return Timer()._init(helpers.getTimer(C_DEFAULT_EVENT_LOOP_GETTER().thisptr))
|
||||
|
||||
# cpdef remove_event_loop():
|
||||
# 'Remove the global event loop'
|
||||
# global C_DEFAULT_EVENT_LOOP
|
||||
|
||||
@@ -255,3 +255,15 @@ def test_tail_call():
|
||||
|
||||
assert callee_server.count == 1
|
||||
assert caller_server.count == 1
|
||||
|
||||
|
||||
def test_timer():
|
||||
global test_timer_var
|
||||
test_timer_var = False
|
||||
|
||||
def set_timer_var():
|
||||
global test_timer_var
|
||||
test_timer_var = True
|
||||
capnp.getTimer().after_delay(1).then(set_timer_var).wait()
|
||||
|
||||
assert test_timer_var is True
|
||||
|
||||
Reference in New Issue
Block a user