Module Rpc_effect_kernel.Polling_state_rpc

val dispatcher : here:lexing_position -> ?sexp_of_query:('query -> Core.Sexp.t) -> ?sexp_of_response:('response -> Core.Sexp.t) -> ?on_forget_client_error:(Core.Error.t -> unit Bonsai.For_open.Effect.t) -> ('query, 'response) Polling_state_rpc.t -> where_to_connect:Where_to_connect.t Bonsai.t -> Bonsai.graph @ local -> ('query -> 'response Core.Or_error.t Bonsai.For_open.Effect.t) Bonsai.t

An effect for dispatching on a particular Polling_state_rpc with a particular query. When the computation is deactivated, it asks the server to cleanup any cached data, so that there is no memory leak. If this cleanup fails, then on_forget_client_error is called with the error.

val babel_dispatcher : here:lexing_position -> ?sexp_of_query:('query -> Core.Sexp.t) -> ?sexp_of_response:('response -> Core.Sexp.t) -> ?on_forget_client_error:(Core.Error.t -> unit Bonsai.For_open.Effect.t) -> ('query, 'response, _) Polling_state_rpc.Expert.Client_resolver.t Babel.Caller.t -> where_to_connect:Where_to_connect.t Bonsai.t -> Bonsai.graph @ local -> ('query -> 'response Core.Or_error.t Bonsai.For_open.Effect.t) Bonsai.t
val versioned_polling_state_dispatcher : here:lexing_position -> ?sexp_of_query:('query -> Core.Sexp.t) -> ?sexp_of_response:('response -> Core.Sexp.t) -> ?on_forget_client_error:(Core.Error.t -> unit Bonsai.For_open.Effect.t) -> ('query, 'response) Versioned_polling_state_rpc.Client.caller -> where_to_connect:Where_to_connect.t Bonsai.t -> Bonsai.graph @ local -> ('query -> 'response Core.Or_error.t Bonsai.For_open.Effect.t) Bonsai.t
val poll : here:lexing_position -> ?sexp_of_query:('query -> Core.Sexp.t) -> ?sexp_of_response:('response -> Core.Sexp.t) -> equal_query:('query -> 'query -> bool) -> ?equal_response:('response -> 'response -> bool) -> ?clear_when_deactivated:bool -> ?intercept_query: ('query -> Inflight_query_id.t -> 'query Bonsai.For_open.Effect.t) Bonsai.t -> ?on_response_received: ('query -> 'response Core.Or_error.t -> unit Bonsai.For_open.Effect.t) Bonsai.t -> ('query, 'response) Polling_state_rpc.t -> where_to_connect:Where_to_connect.t Bonsai.t -> ?when_to_start_next_effect: [ `Wait_period_after_previous_effect_starts_blocking | `Wait_period_after_previous_effect_finishes_blocking | `Every_multiple_of_period_non_blocking | `Every_multiple_of_period_blocking ] -> every:Core.Time_ns.Span.t Bonsai.t -> output_type:('query, 'response, 'output) Poll_result.Output_type.t -> 'query Bonsai.t -> Bonsai.graph @ local -> 'output Bonsai.t

A computation that periodically dispatches on a polling_state_rpc and keeps track of the most recent response. To explicitly re-send the RPC, schedule the refresh field of the result. It also keeps track of the current query that is in-flight.

val babel_poll : here:lexing_position -> ?sexp_of_query:('query -> Core.Sexp.t) -> ?sexp_of_response:('response -> Core.Sexp.t) -> equal_query:('query -> 'query -> bool) -> ?equal_response:('response -> 'response -> bool) -> ?clear_when_deactivated:bool -> ?intercept_query: ('query -> Inflight_query_id.t -> 'query Bonsai.For_open.Effect.t) Bonsai.t -> ?on_response_received: ('query -> 'response Core.Or_error.t -> unit Bonsai.For_open.Effect.t) Bonsai.t -> ('query, 'response, _) Polling_state_rpc.Expert.Client_resolver.t Babel.Caller.t -> where_to_connect:Where_to_connect.t Bonsai.t -> ?when_to_start_next_effect: [ `Wait_period_after_previous_effect_starts_blocking | `Wait_period_after_previous_effect_finishes_blocking | `Every_multiple_of_period_non_blocking | `Every_multiple_of_period_blocking ] -> every:Core.Time_ns.Span.t Bonsai.t -> output_type:('query, 'response, 'output) Poll_result.Output_type.t -> 'query Bonsai.t -> Bonsai.graph @ local -> 'output Bonsai.t
val versioned_polling_state_poll : here:lexing_position -> ?sexp_of_query:('query -> Core.Sexp.t) -> ?sexp_of_response:('response -> Core.Sexp.t) -> equal_query:('query -> 'query -> bool) -> ?equal_response:('response -> 'response -> bool) -> ?clear_when_deactivated:bool -> ?intercept_query: ('query -> Inflight_query_id.t -> 'query Bonsai.For_open.Effect.t) Bonsai.t -> ?on_response_received: ('query -> 'response Core.Or_error.t -> unit Bonsai.For_open.Effect.t) Bonsai.t -> ('query, 'response) Versioned_polling_state_rpc.Client.caller -> where_to_connect:Where_to_connect.t Bonsai.t -> ?when_to_start_next_effect: [ `Wait_period_after_previous_effect_starts_blocking | `Wait_period_after_previous_effect_finishes_blocking | `Every_multiple_of_period_non_blocking | `Every_multiple_of_period_blocking ] -> every:Core.Time_ns.Span.t Bonsai.t -> output_type:('query, 'response, 'output) Poll_result.Output_type.t -> 'query Bonsai.t -> Bonsai.graph @ local -> 'output Bonsai.t
val manual_poll : here:lexing_position -> ?sexp_of_query:('query -> Core.Sexp.t) -> ?sexp_of_response:('response -> Core.Sexp.t) -> equal_query:('query -> 'query -> bool) -> ?equal_response:('response -> 'response -> bool) -> ?clear_when_deactivated:bool -> ?intercept_query: ('query -> Inflight_query_id.t -> 'query Bonsai.For_open.Effect.t) Bonsai.t -> ?on_response_received: ('query -> 'response Core.Or_error.t -> unit Bonsai.For_open.Effect.t) Bonsai.t -> ('query, 'response) Polling_state_rpc.t -> where_to_connect:Where_to_connect.t Bonsai.t -> output_type:('query, 'response, 'output) Poll_result.Output_type.t -> Bonsai.graph @ local -> ('output * ('query -> 'response Core.Or_error.t Bonsai.For_open.Effect.t)) Bonsai.t

Like poll, but returns the poll result and querying effect separately. This allows for more flexible composition and custom handling of the state. The returned effect can be scheduled to send/re-send the RPC.

Unlike poll, this function does not automatically schedule the effect - no polling happens unless you explicitly schedule the returned effect yourself.

val shared_poller : here:lexing_position -> ('query, _) Core.Comparator.Module.t -> ?sexp_of_response:('response -> Core.Sexp.t) -> ?equal_response:('response -> 'response -> bool) -> ?clear_when_deactivated:bool -> ?intercept_query: ('query -> Inflight_query_id.t -> 'query Bonsai.For_open.Effect.t) Bonsai.t -> ?on_response_received: ('query -> 'response Core.Or_error.t -> unit Bonsai.For_open.Effect.t) Bonsai.t -> ('query, 'response) Polling_state_rpc.t -> where_to_connect:Where_to_connect.t Bonsai.t -> every:Core.Time_ns.Span.t Bonsai.t -> Bonsai.graph @ local -> ('query, 'response) Shared_poller.t Bonsai.t
val shared_babel_poller : here:lexing_position -> ('query, _) Core.Comparator.Module.t -> ?sexp_of_response:('response -> Core.Sexp.t) -> ?equal_response:('response -> 'response -> bool) -> ?clear_when_deactivated:bool -> ?intercept_query: ('query -> Inflight_query_id.t -> 'query Bonsai.For_open.Effect.t) Bonsai.t -> ?on_response_received: ('query -> 'response Core.Or_error.t -> unit Bonsai.For_open.Effect.t) Bonsai.t -> ('query, 'response, _) Polling_state_rpc.Expert.Client_resolver.t Babel.Caller.t -> where_to_connect:Where_to_connect.t Bonsai.t -> every:Core.Time_ns.Span.t Bonsai.t -> Bonsai.graph @ local -> ('query, 'response) Shared_poller.t Bonsai.t
val shared_versioned_polling_state_poller : here:lexing_position -> ('query, _) Core.Comparator.Module.t -> ?sexp_of_response:('response -> Core.Sexp.t) -> ?equal_response:('response -> 'response -> bool) -> ?clear_when_deactivated:bool -> ?intercept_query: ('query -> Inflight_query_id.t -> 'query Bonsai.For_open.Effect.t) Bonsai.t -> ?on_response_received: ('query -> 'response Core.Or_error.t -> unit Bonsai.For_open.Effect.t) Bonsai.t -> ('query, 'response) Versioned_polling_state_rpc.Client.caller -> where_to_connect:Where_to_connect.t Bonsai.t -> every:Core.Time_ns.Span.t Bonsai.t -> Bonsai.graph @ local -> ('query, 'response) Shared_poller.t Bonsai.t