Packages
glisten
9.0.1
9.0.1
9.0.0
9.0.0-rc1
8.0.3
8.0.2
8.0.1
8.0.0
8.0.0-rc1
7.0.1
7.0.0
6.0.0
5.0.0
4.0.0
3.0.0
2.0.0
1.0.0
0.11.0
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.0
0.3.2
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
a shiny Gleam TCP/TLS server
Current section
Files
Jump to
Current section
Files
src/glisten@internal@listener.erl
-module(glisten@internal@listener).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/glisten/internal/listener.gleam").
-export([start/4]).
-export_type([message/0, state/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-type message() :: {info, gleam@erlang@process:subject(state())}.
-type state() :: {state,
glisten@socket:listen_socket(),
integer(),
glisten@socket@options:ip_address()}.
-file("src/glisten/internal/listener.gleam", 17).
?DOC(false).
-spec start(
integer(),
glisten@transport:transport(),
list(glisten@socket@options:tcp_option()),
gleam@erlang@process:name(message())
) -> {ok, gleam@otp@actor:started(gleam@erlang@process:subject(message()))} |
{error, gleam@otp@actor:start_error()}.
start(Port, Transport, Options, Name) ->
_pipe@8 = gleam@otp@actor:new_with_initialiser(
5000,
fun(Subject) ->
_pipe = glisten@transport:listen(Transport, Port, Options),
_pipe@2 = gleam@result:'try'(
_pipe,
fun(Socket) ->
_pipe@1 = glisten@transport:sockname(Transport, Socket),
gleam@result:map(
_pipe@1,
fun(Info) ->
{state,
Socket,
erlang:element(2, Info),
erlang:element(1, Info)}
end
)
end
),
_pipe@7 = gleam@result:map(_pipe@2, fun(State) -> _pipe@3 = State,
_pipe@4 = gleam@otp@actor:initialised(_pipe@3),
_pipe@6 = gleam@otp@actor:selecting(
_pipe@4,
begin
_pipe@5 = gleam_erlang_ffi:new_selector(),
gleam@erlang@process:select(_pipe@5, Subject)
end
),
gleam@otp@actor:returning(_pipe@6, Subject) end),
gleam@result:map_error(
_pipe@7,
fun(Err) ->
Error_string = <<"Failed to start socket listener: "/utf8,
(glisten@socket:reason_to_string(Err))/binary>>,
logging:log(error, Error_string),
Error_string
end
)
end
),
_pipe@9 = gleam@otp@actor:on_message(
_pipe@8,
fun(State@1, Msg) -> case Msg of
{info, Caller} ->
gleam@erlang@process:send(Caller, State@1),
gleam@otp@actor:continue(State@1)
end end
),
_pipe@10 = gleam@otp@actor:named(_pipe@9, Name),
gleam@otp@actor:start(_pipe@10).