eventsource_h.erl 612 B

12345678910111213141516171819202122232425
  1. %% Feel free to use, reuse and abuse the code in this file.
  2. %% @doc EventSource emitter.
  3. -module(eventsource_h).
  4. -export([init/2]).
  5. -export([info/3]).
  6. init(Req0, Opts) ->
  7. Req = cowboy_req:stream_reply(200, #{
  8. <<"content-type">> => <<"text/event-stream">>
  9. }, Req0),
  10. erlang:send_after(1000, self(), {message, "Tick"}),
  11. {cowboy_loop, Req, Opts}.
  12. info({message, Msg}, Req, State) ->
  13. cowboy_req:stream_events(#{
  14. id => id(),
  15. data => Msg
  16. }, nofin, Req),
  17. erlang:send_after(1000, self(), {message, "Tick"}),
  18. {ok, Req, State}.
  19. id() ->
  20. integer_to_list(erlang:unique_integer([positive, monotonic]), 16).