Up

Module Hub = Hub

Signature

module Client_id : sig .. end
type ('from_client, 'to_client) t
val close : (_, _) t -> unit Async.Std.Deferred.t
val listen : ('a, _) t -> [
| `Connect of Client_id.t
| `Disconnect of Client_id.t * string
| `Data of Client_id.t * 'a
] Async.Std.Pipe.Reader.t

listen and listen_simple start a loop that accepts connections from clients that wish to open channels connected to the hub. listen_simple returns the sequence of messages sent by clients. listen returns those, intermixed with messages indicating when clients `Connect and `Disconnect.

listen or listen_simple should be called exactly once for a given hub. Subsequent calls will raise.

val listen_simple : ('a, _) t -> (Client_id.t * 'a) Async.Std.Pipe.Reader.t
val send : (_, 'a) t -> Client_id.t -> 'a -> unit
val send_to_all : (_, 'a) t -> 'a -> unit
val flushed : (_, _) t -> unit Async.Std.Deferred.t
val clients : (_, _) t -> Client_id.t list
val open_channel : ('a, 'b) t -> ('a, 'b) Channel.t Async.Std.Deferred.t

open_channel may be called even in a different process than the creator of the hub.

val socket : (_, _) t -> Async.Std.Unix.Inet_addr.t * int