Source file connection.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[@@@warning "-8"]
open Riot
let rec loop : Socket.t -> 's Handler.t -> 's -> unit =
fun socket handler ctx ->
let (Ok data) = Socket.receive socket ~timeout:Net.Socket.Infinity in
Logger.debug (fun f -> f "Received data: %S" (Bigstringaf.to_string data));
match Handler.handle_data handler data socket ctx with
| Continue ctx -> loop socket handler ctx
| Close ctx -> Handler.handle_close handler socket ctx
let init : Socket.t -> 's Handler.t -> 's -> unit =
fun socket handler ctx ->
let (Ok socket) = Socket.handshake socket in
match Handler.handle_connection handler socket ctx with
| Continue ctx -> loop socket handler ctx
| _ -> assert false
let start_link socket handler ctx =
let pid = spawn_link (fun () -> init socket handler ctx) in
Ok pid