Current section

Files

Jump to
chatterbox src chatterbox_sup.erl
Raw

src/chatterbox_sup.erl

-module(chatterbox_sup).
-behaviour(supervisor).
-export([
init/1,
start_link/0,
start_socket/0
]).
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
init([]) ->
{ok, Port} = application:get_env(chatterbox, port),
Options = [
binary,
{reuseaddr, true},
{packet, raw},
{backlog, 1024},
{active, false}
],
{ok, SSLEnabled} = application:get_env(chatterbox, ssl),
{Transport, SSLOptions} = case SSLEnabled of
true ->
{ok, SSLOpts} = application:get_env(chatterbox, ssl_options),
{ssl, SSLOpts};
false ->
{gen_tcp, []}
end,
Http2Settings = chatterbox:settings(server),
spawn_link(fun empty_listeners/0),
{ok, ListenSocket} = gen_tcp:listen(Port, Options),
Restart = {simple_one_for_one, 60, 3600},
Children = [{socket,
{h2_connection, start_server_link, [{Transport, ListenSocket}, SSLOptions, Http2Settings]},
temporary, 1000, worker, [h2_connection]}],
{ok, {Restart, Children}}.
start_socket() ->
supervisor:start_child(?MODULE, []).
empty_listeners() ->
{ok, ConcurrentAcceptors} = application:get_env(chatterbox, concurrent_acceptors),
[ start_socket() || _ <- lists:seq(1,ConcurrentAcceptors)].