Packages
smppex
0.3.0
3.3.0
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
retired
3.1.0
retired
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.4.0
2.3.3
2.3.2
2.3.1
2.3.0
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.0
2.0.1
2.0.0
1.0.1
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
SMPP 3.4 protocol and framework implemented in Elixir
Current section
Files
Jump to
Current section
Files
lib/smppex/client_pool.ex
defmodule SMPPEX.ClientPool do
@moduledoc false
alias :erlang, as: Erlang
alias :ranch, as: Ranch
alias :ranch_server, as: RanchServer
alias :ranch_conns_sup, as: RanchConnsSup
@default_capacity 500
@default_transport :ranch_tcp
@default_timeout 5000
@type session :: term
@type handler_result :: {:ok, session} | {:error, reason :: term}
@type handler :: (Ranch.ref, term, module, pid -> handler_result)
@type pool :: {pid, Ranch.ref, module}
@spec start(handler, non_neg_integer, module, non_neg_integer) :: pool
def start(handler, capacity \\ @default_capacity, transport \\ @default_transport, ack_timeout \\ @default_timeout) do
ref = make_ref()
RanchServer.set_new_listener_opts(ref, capacity, [{:handler, handler}])
{:ok, pid} = RanchConnsSup.start_link(ref, :worker, :brutal_kill, transport, ack_timeout, SMPPEX.Session)
{pid, ref, transport}
end
@spec stop(pool) :: :ok
def stop({pid, ref, _transport}) do
Erlang.unlink(pid)
Erlang.exit(pid, :shutdown)
RanchServer.cleanup_listener_opts(ref)
end
@spec start_session(pool, port) :: :ok
def start_session({pid, _ref, transport}, socket) do
transport.controlling_process(socket, pid)
RanchConnsSup.start_protocol(pid, socket)
end
@spec ref(pool) :: Ranch.ref
def ref({_pid, ref, _transport}), do: ref
end