aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClombrong <cromblong@egregore.fun>2025-08-15 14:25:16 +0200
committerClombrong <cromblong@egregore.fun>2025-08-15 22:53:59 +0200
commitd9de994b158a83122aa5623c3a2f848154d8140c (patch)
tree1b74db88f8881bf747cccc6aaa04a1648972e1df
parente69f8b2fbd1a080b1dab4e3c3d9e508fbdaed923 (diff)
refactor(session): move state map to specialized function
-rw-r--r--lib/session.ml35
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)