Current section
Files
Jump to
Current section
Files
src/echo_server.erl
-module(echo_server).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/echo_server.gleam").
-export([main/0]).
-file("src/echo_server.gleam", 21).
-spec handler(gleam@http@request:request(mist@internal@http:connection())) -> gleam@http@response:response(mist:response_data()).
handler(Req) ->
case erlang:element(8, Req) of
<<"/ws"/utf8>> ->
Echo_handler = wist:handler(
fun(_) -> nil end,
fun(State, Event) -> case Event of
opened ->
gleam_stdlib:println(
<<"WebSocket connection opened"/utf8>>
),
{State, []};
{message, Frame} ->
{State, [{send_frame, Frame}]};
{closed, Reason} ->
gleam_stdlib:println(
<<"WebSocket connection closed"/utf8>>
),
case Reason of
normal ->
gleam_stdlib:println(
<<"Reason: Normal"/utf8>>
);
{abnormal, Msg} ->
gleam_stdlib:println(
<<<<"Reason: Abnormal ("/utf8,
Msg/binary>>/binary,
")"/utf8>>
);
unknown ->
gleam_stdlib:println(
<<"Reason: Unknown"/utf8>>
)
end,
{State, []};
{failed, Err} ->
{socket_error, Msg@1} = Err,
gleam_stdlib:println(
<<"WebSocket connection failed: "/utf8,
Msg@1/binary>>
),
{State, []}
end end
),
wist@adapters@mist:upgrade(Req, Echo_handler, wist:raw_codec());
_ ->
_pipe = gleam@http@response:new(200),
gleam@http@response:set_body(
_pipe,
{bytes,
gleam_stdlib:wrap_list(
<<"Hello, this is wist! Connect a WebSocket client to /ws"/utf8>>
)}
)
end.
-file("src/echo_server.gleam", 10).
-spec main() -> nil.
main() ->
gleam_stdlib:println(
<<"Starting echo server on http://localhost:8080..."/utf8>>
),
case begin
_pipe = mist:new(fun handler/1),
_pipe@1 = mist:port(_pipe, 8080),
mist:start(_pipe@1)
end of
{ok, _} -> nil;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"echo_server"/utf8>>,
function => <<"main"/utf8>>,
line => 13,
value => _assert_fail,
start => 300,
'end' => 381,
pattern_start => 311,
pattern_end => 316})
end,
gleam_erlang_ffi:sleep_forever().