mirror of
https://github.com/zap-proto/ocaml-rpc.git
synced 2026-10-30 15:04:28 +00:00
36 lines
1006 B
OCaml
36 lines
1006 B
OCaml
open Eio.Std
|
|
open Capnp_rpc_net
|
|
|
|
let delay = if Sys.getenv_opt "CI" = None then 1.0 else 0.0
|
|
|
|
let () =
|
|
Logs.set_level (Some Logs.Warning);
|
|
Logs.set_reporter (Logs_fmt.reporter ())
|
|
|
|
let cap_file = "echo.cap"
|
|
|
|
let serve ~delay config =
|
|
Switch.run @@ fun sw ->
|
|
let service_id = Capnp_rpc_unix.Vat_config.derived_id config "main" in
|
|
let restore = Restorer.single service_id (Echo.local ~delay) in
|
|
let vat = Capnp_rpc_unix.serve ~sw ~restore config in
|
|
match Capnp_rpc_unix.Cap_file.save_service vat service_id cap_file with
|
|
| Error `Msg m -> failwith m
|
|
| Ok () ->
|
|
traceln "Server running. Connect using %S." cap_file;
|
|
Fiber.await_cancel ()
|
|
|
|
open Cmdliner
|
|
|
|
let ( $$ ) f x = Term.(const f $ x)
|
|
|
|
let serve_cmd env =
|
|
let doc = "run the server" in
|
|
let info = Cmd.info "serve" ~doc in
|
|
let delay = Eio.Time.Timeout.seconds env#mono_clock delay in
|
|
Cmd.v info (serve ~delay $$ Capnp_rpc_unix.Vat_config.cmd env)
|
|
|
|
let () =
|
|
exit @@ Eio_main.run @@ fun env ->
|
|
Cmd.eval (serve_cmd env)
|