Packages

A TCP transport channel for the spoke MQTT client.

Current section

Files

Jump to
spoke_tcp src spoke@tcp.erl
Raw

src/spoke@tcp.erl

-module(spoke@tcp).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([connector/3, connector_with_defaults/1]).
-file("/home/sbergen/source/spoke/spoke_tcp/src/spoke/tcp.gleam", 71).
-spec map_tcp_message(mug:tcp_message()) -> {ok, bitstring()} |
{error, binary()}.
map_tcp_message(Msg) ->
case Msg of
{packet, _, Data} ->
{ok, Data};
{socket_closed, _} ->
{error, <<"Channel closed"/utf8>>};
{tcp_error, _, E} ->
{error, <<"TCP error: "/utf8, (gleam@string:inspect(E))/binary>>}
end.
-file("/home/sbergen/source/spoke/spoke_tcp/src/spoke/tcp.gleam", 79).
-spec map_mug_error({ok, JNS} | {error, mug:error()}, binary()) -> {ok, JNS} |
{error, binary()}.
map_mug_error(R, Reason) ->
gleam@result:map_error(
R,
fun(E) ->
<<<<Reason/binary, ": "/utf8>>/binary,
(gleam@string:inspect(E))/binary>>
end
).
-file("/home/sbergen/source/spoke/spoke_tcp/src/spoke/tcp.gleam", 66).
-spec send(mug:socket(), gleam@bytes_tree:bytes_tree()) -> {ok, nil} |
{error, binary()}.
send(Socket, Data) ->
_pipe = mug_ffi:send(Socket, Data),
map_mug_error(_pipe, <<"Send error"/utf8>>).
-file("/home/sbergen/source/spoke/spoke_tcp/src/spoke/tcp.gleam", 36).
-spec connect(binary(), integer(), integer()) -> {ok,
{fun((gleam@bytes_tree:bytes_tree()) -> {ok, nil} | {error, binary()}),
fun(() -> gleam@erlang@process:selector({ok, bitstring()} |
{error, binary()})),
fun(() -> nil)}} |
{error, binary()}.
connect(Host, Port, Connect_timeout) ->
Options = {connection_options, Host, Port, Connect_timeout},
gleam@result:'try'(
begin
_pipe = mug:connect(Options),
map_mug_error(_pipe, <<"Connect error"/utf8>>)
end,
fun(Socket) ->
Selector = begin
_pipe@1 = gleam_erlang_ffi:new_selector(),
mug:selecting_tcp_messages(_pipe@1, fun map_tcp_message/1)
end,
{ok,
{fun(_capture) -> send(Socket, _capture) end,
fun() ->
mug:receive_next_packet_as_message(Socket),
Selector
end,
fun() ->
_ = mug_ffi:shutdown(Socket),
nil
end}}
end
).
-file("/home/sbergen/source/spoke/spoke_tcp/src/spoke/tcp.gleam", 28).
-spec connector(binary(), integer(), integer()) -> fun(() -> {ok,
{fun((gleam@bytes_tree:bytes_tree()) -> {ok, nil} | {error, binary()}),
fun(() -> gleam@erlang@process:selector({ok, bitstring()} |
{error, binary()})),
fun(() -> nil)}} |
{error, binary()}).
connector(Host, Port, Connect_timeout) ->
fun() -> connect(Host, Port, Connect_timeout) end.
-file("/home/sbergen/source/spoke/spoke_tcp/src/spoke/tcp.gleam", 23).
-spec connector_with_defaults(binary()) -> fun(() -> {ok,
{fun((gleam@bytes_tree:bytes_tree()) -> {ok, nil} | {error, binary()}),
fun(() -> gleam@erlang@process:selector({ok, bitstring()} |
{error, binary()})),
fun(() -> nil)}} |
{error, binary()}).
connector_with_defaults(Host) ->
connector(Host, 1883, 5000).