Type of a frontend connection to a shared ring. 'a is the response type, and 'b is the request id type (e.g. int or int64).
val init : ('b -> string) -> ('a, 'b) Ring.Rpc.Front.t -> ('a, 'b) tinit string_of_id ring initialises a stateful lwt client attached to ring.
write ring req_fn blocks until a ring slot is free, calls req_fn on it and returns a thread that will wakeup when the response will be available.
val push : ('a, 'b) t -> (unit -> unit) -> unitpush ring notify_fn advances ring pointers, exposing the written requests to the other end. If the other end won't see the update, notify_fn is called to signal it.
push_request_and_wait frontend notify_fn req_fn is write req_fn >>= fun t -> push notify_fn; return t.
val push_request_async : ('a, 'b) t -> (unit -> unit) -> (Ring.buf -> 'b) -> ('a Lwt.t -> unit Lwt.t) -> unit Lwt.tpush_request_async ring notify_fn req_fn free_fn is like push_request_and_wait except it calls free_fn on the result of write instead of returning it.
poll frontend resp_fn polls the ring for responses, and wakes up any threads that are sleeping (as a result of calling push_request_and_wait). This can be called regularly, or triggered via some external event such as an event channel signal.
val shutdown : ('a, 'b) t -> unitwait_for_free frontend n waits until at least n slots are free. * It doesn't reserve them, so you'll probably need to use your own mutex * around this call. Requests are handled in order, so even large requests * will eventually be served.
val to_string : ('a, 'b) t -> stringto_string t returns debug-printable description of the ring metadata