Packages

a gleam lib for connecting to twitch IRC

Current section

Files

Jump to
gwitch src websockets.erl
Raw

src/websockets.erl

-module(websockets).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([create_websockets_builder/2]).
-export_type([msg/0]).
-type msg() :: close | {message, binary()}.
-spec create_websockets_builder(
gleam@http@request:request(binary()),
fun(() -> {LQK, gleam@option:option(gleam@erlang@process:selector(msg()))})
) -> stratus:builder(LQK, msg()).
create_websockets_builder(Req, Initializer) ->
_pipe = stratus:websocket(
Req,
Initializer,
fun(Msg, State, Conn) -> case Msg of
{text, Msg@1} ->
gleam@io:println(<<"Received message "/utf8, Msg@1/binary>>),
gleam@otp@actor:continue(State);
{user, {message, Msg@2}} ->
gleam@io:debug({<<"Sent message"/utf8>>, Msg@2}),
_assert_subject = stratus:send_text_message(Conn, Msg@2),
{ok, _} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"websockets"/utf8>>,
function => <<"create_websockets_builder"/utf8>>,
line => 29})
end,
gleam@otp@actor:continue(State);
{binary, _} ->
gleam@io:debug(<<"Received binary message"/utf8>>),
gleam@otp@actor:continue(State);
{user, close} ->
gleam@io:debug(<<"Close message sent"/utf8>>),
_assert_subject@1 = stratus:close(Conn),
{ok, _} = case _assert_subject@1 of
{ok, _} -> _assert_subject@1;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail@1,
module => <<"websockets"/utf8>>,
function => <<"create_websockets_builder"/utf8>>,
line => 39})
end,
{stop, normal}
end end
),
stratus:on_close(
_pipe,
fun(_) -> gleam@io:println(<<"Closing Connection!"/utf8>>) end
).