0 | module System.UV.Idle
3 | import IO.Async.Event
4 | import System.UV.Loop
5 | import System.UV.Pointer
6 | import System.UV.Raw.Handle
7 | import System.UV.Raw.Idle
11 | %inline stopIdle : HasIO io => Ptr Idle -> io ()
12 | stopIdle = ignore . uv_idle_stop
14 | %inline stopCheck : HasIO io => Ptr Check -> io ()
15 | stopCheck = ignore . uv_check_stop
17 | %inline stopPrepare : HasIO io => Ptr Prepare -> io ()
18 | stopPrepare = ignore . uv_prepare_stop
20 | parameters {auto cc : CloseCB}
22 | Resource (Ptr Idle) where
23 | release p = stopIdle p >> uv_close p cc
26 | Resource (Ptr Check) where
27 | release p = stopCheck p >> uv_close p cc
30 | Resource (Ptr Prepare) where
31 | release p = stopPrepare p >> uv_close p cc
33 | parameters {auto l : UVLoop}
34 | {auto has : Has UVError es}
37 | mkIdle : Async es (Ptr Idle)
38 | mkIdle = mallocPtr Idle >>= uvAct (uv_idle_init l.loop)
42 | onIdle : (Event Nat -> Async es a) -> Async es a
44 | use1 mkIdle $
\pt => do
46 | uv $
uv_idle_start pt (\_ => send ev 1 id (+))