diff options
author | Clombrong <cromblong@egregore.fun> | 2025-08-15 14:25:16 +0200 |
---|---|---|
committer | Clombrong <cromblong@egregore.fun> | 2025-08-15 22:53:59 +0200 |
commit | d9de994b158a83122aa5623c3a2f848154d8140c (patch) | |
tree | 1b74db88f8881bf747cccc6aaa04a1648972e1df | |
parent | e69f8b2fbd1a080b1dab4e3c3d9e508fbdaed923 (diff) |
refactor(session): move state map to specialized function
-rw-r--r-- | lib/session.ml | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/lib/session.ml b/lib/session.ml index cb44653..4db13ff 100644 --- a/lib/session.ml +++ b/lib/session.ml @@ -43,24 +43,23 @@ let create (config : config) : t Lwt.t = | _ -> s1 = s2 in let state, update = S.create ~eq Disconnected in - let+ () = S.map_s - (function - | Connecting domain -> - let+ portal = Portal.connect domain - in update (Connected (portal, Starting_stream)) - | Connected (portal, Starting_stream) -> - let+ features = Stream.start portal - in let next_state = features_next_state features - in update (Connected (portal, next_state)) - | Connected (portal, Negotiating_feature (feature, features)) -> - let+ () = negotiate feature portal config - in let next_state = if needs_restart (Feature.unwrap feature) - then Starting_stream - else features_next_state features - in update (Connected (portal, next_state)) - | _ -> Lwt.return_unit) - state >|= S.keep; - in { state; update } + let connection_map = function + | Connecting domain -> + let+ portal = Portal.connect domain + in update (Connected (portal, Starting_stream)) + | Connected (portal, Starting_stream) -> + let+ features = Stream.start portal + in let next_state = features_next_state features + in update (Connected (portal, next_state)) + | Connected (portal, Negotiating_feature (feature, features)) -> + let+ () = negotiate feature portal config + in let next_state = if needs_restart (Feature.unwrap feature) + then Starting_stream + else features_next_state features + in update (Connected (portal, next_state)) + | _ -> Lwt.return_unit + in let+ () = S.map_s connection_map state >|= S.keep; + in { state; update } let connect (session : t) (domain : Portal.domain) : unit = session.update (Connecting domain) |