Up

module Hub

: sig

A hub is a place to which any number (possibly zero) of clients can connect a channel and send messages. The process in which the hub is created is responsible for listening to the messages clients send, and can send messages to an individual client, or broadcast a message to all clients.

Unless otherwise noted none of the below functions may be called in a process other than the one that created the hub.

#
module Client_id : sig
#
type t
include Core.Std.Comparable with type t := t
include Core.Std.Hashable with type t := t
#
val t_of_sexp : Sexplib.Sexp.t -> t
#
val sexp_of_t : t -> Sexplib.Sexp.t
end
#
type ('from_client, 'to_client) t
#
val create : ?buffer_age_limit:Async.Std.Writer.buffer_age_limit -> ([
| `Passive
], Async.Std.Socket.Address.Inet.t) Async.Std.Socket.t -> (_, _) t Async.Std.Deferred.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
end