0 | module System.UV.Raw.Stream
2 | import System.UV.Raw.Callback
3 | import System.UV.Raw.Handle
4 | import System.UV.Raw.Loop
5 | import System.UV.Raw.Pointer
6 | import System.UV.Raw.Req
7 | import System.UV.Raw.Util
15 | %foreign (idris_uv "uv_shutdown")
16 | prim__uv_shutdown : Ptr Shutdown -> Ptr Stream -> AnyPtr -> PrimIO Int32
18 | %foreign (idris_uv "uv_listen")
19 | prim__uv_listen : Ptr Stream -> (backlog : Int32) -> AnyPtr -> PrimIO Int32
21 | %foreign (idris_uv "uv_accept")
22 | prim__uv_accept : (server, client : Ptr Stream) -> PrimIO Int32
24 | %foreign (idris_uv "uv_read_start")
25 | prim__uv_read_start : Ptr Stream -> AnyPtr -> AnyPtr -> PrimIO Int32
27 | %foreign (idris_uv "uv_read_stop")
28 | prim__uv_read_stop : Ptr Stream -> PrimIO Int32
30 | %foreign (idris_uv "idris_uv_write")
39 | %foreign (idris_uv "uv_is_readable")
40 | prim__uv_is_readable : Ptr Stream -> PrimIO Int32
42 | %foreign (idris_uv "uv_is_writable")
43 | prim__uv_is_writable : Ptr Stream -> PrimIO Int32
45 | %foreign (idris_uv "uv_stream_set_blocking")
46 | prim__uv_stream_set_blocking: Ptr Stream -> Int32 -> PrimIO Int32
48 | %foreign (idris_uv "uv_stream_get_write_queue_size")
49 | prim__uv_get_write_queue_size: Ptr Stream -> PrimIO Bits32
56 | record AllocCB where
61 | parameters {auto has : HasIO io}
64 | allocCB : (Ptr Handle -> Bits32 -> Ptr Buf -> IO ()) -> io AllocCB
65 | allocCB = map AC . ptrUintPtrCB
68 | sizedAlloc : Bits32 -> io AllocCB
70 | allocCB $
\_,_,buf => do
71 | cs <- mallocPtrs Bits8 s
75 | defaultAlloc : io AllocCB
77 | allocCB $
\_,size,buf => do
78 | cs <- mallocPtrs Bits8 size
82 | freeAllocCB : AllocCB -> io ()
83 | freeAllocCB = unlockAnyPtr . ptr
92 | -> {auto 0 cst : PCast t Stream}
93 | -> (Ptr Shutdown -> Int32 -> IO ())
95 | uv_shutdown str act = do
96 | p <- mallocPtr Shutdown
97 | cb <- ptrIntCB (\p,y => act p y >> freeReq p)
98 | uv_req_set_data p cb
99 | primIO $
prim__uv_shutdown p (castPtr str) cb
108 | -> {auto 0 cst : PCast t Stream}
109 | -> (backlog : Int32)
110 | -> (Ptr Stream -> Int32 -> IO ())
112 | uv_listen str bl act = do
114 | primIO $
prim__uv_listen (castPtr str) bl cb
119 | -> (client : Ptr t)
120 | -> {auto 0 csts : PCast s Stream}
121 | -> {auto 0 cstt : PCast t Stream}
123 | uv_accept ser cli = primIO $
prim__uv_accept (castPtr ser) (castPtr cli)
131 | -> {auto 0 cstt : PCast t Stream}
133 | -> (readCb : Ptr Stream -> Int32 -> Ptr Buf -> IO ())
135 | uv_read_start str (AC p) readCB = do
136 | cb <- ptrIntPtrCB readCB
137 | uv_handle_set_data (castPtr {t = Stream} str) cb
138 | primIO $
prim__uv_read_start (castPtr str) p cb
150 | uv_read_stop : Ptr t -> {auto 0 cstt : PCast t Stream} -> io ()
151 | uv_read_stop str = ignore $
primIO $
prim__uv_read_stop (castPtr str)
157 | -> {auto 0 cstt : PCast t Stream}
160 | -> (Ptr Write -> Int32 -> IO ())
162 | uv_write str buf size act = do
163 | wr <- mallocPtr Write
164 | cb <- ptrIntCB (\x,y => act x y >> freeReq x)
165 | uv_req_set_data wr cb
166 | primIO $
prim__uv_write wr (castPtr str) buf size cb
169 | uv_is_readable : Ptr t -> (0 _ : PCast t Stream) => io Bool
170 | uv_is_readable p = int32ToBool <$> primIO (prim__uv_is_readable $
castPtr p)
173 | uv_is_writable : Ptr t -> (0 _ : PCast t Stream) => io Bool
174 | uv_is_writable p = int32ToBool <$> primIO (prim__uv_is_writable $
castPtr p)
177 | uv_stream_set_blocking : Ptr t -> (0 _ : PCast t Stream) => Bool -> io Int32
178 | uv_stream_set_blocking p b =
179 | primIO $
prim__uv_stream_set_blocking (castPtr p) (boolToInt32 b)
182 | uv_get_write_queue_size: Ptr t -> (0 _ : PCast t Stream) => io Bits32
183 | uv_get_write_queue_size p = primIO $
prim__uv_get_write_queue_size (castPtr p)