glisten
Types
This type holds useful bits of data for the active connection.
pub type Connection(user_message) {
Connection(
client_ip: ClientIp,
socket: Socket,
transport: Transport,
subject: Subject(handler.Message(user_message)),
)
}
Constructors
-
Connection( client_ip: ClientIp, socket: Socket, transport: Transport, subject: Subject(handler.Message(user_message)), )
Arguments
-
client_ip
This will be optionally a tuple for the IPv4 of the other end of the socket
-
transport
This provides a uniform interface for both TCP and SSL methods.
-
This is the shape of the function you need to provide for the handler
argument to serve(_ssl)
.
pub type Loop(user_message, data) =
fn(Message(user_message), data, Connection(user_message)) ->
actor.Next(Message(user_message), data)
Your provided loop function with receive these message types as the first argument.
pub type Message(user_message) {
Packet(BitString)
User(user_message)
}
Constructors
-
Packet(BitString)
These are messages received from the socket
-
User(user_message)
These are any messages received from the selector returned from
on_init
Reasons that serve
might fail
pub type StartError {
ListenerClosed
ListenerTimeout
AcceptorTimeout
AcceptorFailed(process.ExitReason)
AcceptorCrashed(Dynamic)
SystemError(SocketReason)
}
Constructors
-
ListenerClosed
-
ListenerTimeout
-
AcceptorTimeout
-
AcceptorFailed(process.ExitReason)
-
AcceptorCrashed(Dynamic)
-
SystemError(SocketReason)
Functions
pub fn handler(on_init: fn() -> #(a, Option(Selector(b))), loop: fn(
Message(b),
a,
Connection(b),
) -> Next(Message(b), a)) -> Handler(b, a)
Create a new handler for each connection. The required arguments mirror the
actor.start
API from gleam_otp
. The default pool is 10 accceptor
processes.
pub fn send(conn: Connection(a), msg: BitBuilder) -> Result(
Nil,
SocketReason,
)
Sends a BitBuilder message over the socket using the active transport
pub fn serve(handler: Handler(a, b), port: Int) -> Result(
Nil,
StartError,
)
Start the TCP server with the given handler on the provided port
pub fn serve_ssl(handler: Handler(a, b), port port: Int, certfile certfile: String, keyfile keyfile: String) -> Result(
Nil,
StartError,
)
Start the SSL server with the given handler on the provided port. The key and cert files must be provided, valid, and readable by the current user.
pub fn with_close(handler: Handler(a, b), on_close: fn() -> Nil) -> Handler(
a,
b,
)
Adds a function to the handler to be called when the connection is closed.
pub fn with_pool_size(handler: Handler(a, b), size: Int) -> Handler(
a,
b,
)
Modify the size of the acceptor pool