-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 ).