From 1b4de3ec44510b0e2a9f5a6c90a1cf1a3c2b889f Mon Sep 17 00:00:00 2001 From: Clombrong Date: Tue, 12 Aug 2025 12:06:24 +0200 Subject: feat(session): use state management in connection handling --- lib/session.ml | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'lib') diff --git a/lib/session.ml b/lib/session.ml index 5b61346..7534433 100644 --- a/lib/session.ml +++ b/lib/session.ml @@ -1,5 +1,6 @@ open Lwt.Syntax open Lwt.Infix +open Lwt_react type state = | Disconnected @@ -32,3 +33,13 @@ let connect (domain : string) (config : Stream.config) : (Portal.t * Stream.feat | features -> Lwt.return features in start domain portal >>= handle_features in (portal, features) + +let create (domain : string) (config : Stream.config) : (state signal * (unit -> unit)) Lwt.t = + let state, update = S.create Disconnected in + let+ () = S.map_s + (function + | Connecting -> let+ portal, features = connect domain config + in update (Connected (portal, features)) + | _ -> Lwt.return_unit) + state >|= S.keep; + in state, (fun () -> update Connecting) -- cgit v1.2.3