package dream
Tidy, feature-complete Web framework
Install
Dune Dependency
Authors
Maintainers
Sources
dream-1.0.0-alpha1.tar.gz
sha256=c8d988568fbbeffb151abdb4d6b903fbd3897842d3eb9b2c28fb350f0f02bbd4
md5=b8ad7f3e30f3e88e5451d92e42b49ce4
doc/src/websocketaf/wsd.ml.html
Source file wsd.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
module IOVec = Httpaf.IOVec type mode = [ `Client of unit -> int32 | `Server ] type t = { faraday : Faraday.t ; mode : mode ; mutable wakeup : Optional_thunk.t } let default_ready_to_write = Sys.opaque_identity (fun () -> ()) let create mode = { faraday = Faraday.create 0x1000 ; mode ; wakeup = Optional_thunk.none; } let mask t = match t.mode with | `Client m -> Some (m ()) | `Server -> None let is_closed t = Faraday.is_closed t.faraday let on_wakeup t k = if Faraday.is_closed t.faraday then failwith "on_wakeup on closed writer" else if Optional_thunk.is_some t.wakeup then failwith "on_wakeup: only one callback can be registered at a time" else t.wakeup <- Optional_thunk.some k let wakeup t = let f = t.wakeup in t.wakeup <- Optional_thunk.none; Optional_thunk.call_if_some f let schedule t ~kind payload ~off ~len = let mask = mask t in Websocket.Frame.schedule_serialize t.faraday ?mask ~is_fin:true ~opcode:(kind :> Websocket.Opcode.t) ~payload ~off ~len; wakeup t let send_bytes t ~kind payload ~off ~len = let mask = mask t in Websocket.Frame.serialize_bytes t.faraday ?mask ~is_fin:true ~opcode:(kind :> Websocket.Opcode.t) ~payload ~off ~len; wakeup t let send_ping t = Websocket.Frame.serialize_control t.faraday ~opcode:`Ping; wakeup t let send_pong t = Websocket.Frame.serialize_control t.faraday ~opcode:`Pong; wakeup t let flushed t f = Faraday.flush t.faraday f let close ?code t = begin match code with | Some code -> let mask = mask t in let payload = Bytes.create 2 in Bytes.set_uint16_be payload 0 (Websocket.Close_code.to_int code); Websocket.Frame.serialize_bytes t.faraday ?mask ~is_fin:true ~opcode:`Connection_close ~payload ~off:0 ~len:2; | None -> () end; Faraday.close t.faraday; wakeup t let next t = match Faraday.operation t.faraday with | `Close -> `Close 0 (* XXX(andreas): should track unwritten bytes *) | `Yield -> `Yield | `Writev iovecs -> `Write iovecs let report_result t result = match result with | `Closed -> close t | `Ok len -> Faraday.shift t.faraday len
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>