aboutsummaryrefslogtreecommitdiff
path: root/lib/session.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/session.ml')
-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)