-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 => <>, 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().