package archi-async
Async runtime for Archi, a library for managing the lifecycle of stateful components in OCaml
Install
Dune Dependency
Authors
Maintainers
Sources
archi-0.2.0.tbz
sha256=5b33fc94a73d211f6d7ccebe750ac52b03962029fc90e35bb47329de611799c0
sha512=f5fb600a19cd6d0022ae0f6519ee7473c773c32fb6cb15638b26a9a08c320ddfafd1a12e8ed3207727a7e8c893ef0ac6eadd57a0f8a935da40e79cabf86b11be
README.md.html
archi
Archi is an OCaml library for managing the lifecycle of stateful components and their dependencies.
Installation
$ opam install archi # choose your preferred runtime: archi-lwt archi-async
Usage & Examples
TODO, read the mli file for now.
Examples
The design of this library is heavily inspired by the component
library for Clojure. The terminology is similar, and so is the API.
open Lwt.Infix
open Archi_lwt
module Database = struct
type db = { handle : int }
let start () =
Format.eprintf "Started DB.@.";
Lwt_result.return { handle = 42 }
let stop _db = Lwt_io.eprintlf "Stopped DB.%!"
let component = Component.make ~start ~stop
end
module WebServer = struct
type t = Lwt_io.server
let start () _db : (t, string) Lwt_result.t =
let listen_address = Unix.(ADDR_INET (inet_addr_loopback, 3000)) in
Lwt_io.establish_server_with_client_address listen_address (fun _ _ ->
Lwt_io.printlf "Client connected.%!")
>>= fun server ->
Format.eprintf "Started server.@.";
Lwt_result.return server
let stop server =
Lwt_io.shutdown_server server >>= fun () ->
Lwt_io.eprintlf "Stopped server.%!"
let component =
Component.using ~start ~stop ~dependencies:[ Database.component ]
end
let system =
System.make [ "db", Database.component; "server", WebServer.component ]
let main () =
System.start () system >>= fun system ->
match system with
| Ok system ->
let forever, waiter = Lwt.wait () in
Sys.(
set_signal
sigint
(Signal_handle
(fun _ ->
Format.eprintf "SIGINT received, tearing down.@.";
Lwt.async (fun () ->
System.stop system >|= fun _stopped_system ->
Lwt.wakeup_later waiter ()))));
forever
| Error error ->
Format.eprintf "ERROR: %s@." error;
exit 1
let () = Lwt_main.run (main ())
License & Copyright
Copyright (c) 2020 António Nuno Monteiro
Archi is distributed under the 3-Clause BSD License, see LICENSE.
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>