http_loop_stream_recv.erl 693 B

12345678910111213141516171819202122232425262728293031323334
  1. %% Feel free to use, reuse and abuse the code in this file.
  2. -module(http_loop_stream_recv).
  3. -export([init/2]).
  4. -export([info/3]).
  5. -export([terminate/3]).
  6. init(Req, _) ->
  7. receive after 100 -> ok end,
  8. self() ! stream,
  9. {cowboy_loop, Req, undefined, 100}.
  10. info(stream, Req, undefined) ->
  11. stream(Req, 1, <<>>).
  12. stream(Req, ID, Acc) ->
  13. case cowboy_req:body(Req) of
  14. {ok, <<>>, Req2} ->
  15. {stop, cowboy_req:reply(200, Req2), undefined};
  16. {_, Data, Req2} ->
  17. parse_id(Req2, ID, << Acc/binary, Data/binary >>)
  18. end.
  19. parse_id(Req, ID, Data) ->
  20. case Data of
  21. << ID:32, Rest/bits >> ->
  22. parse_id(Req, ID + 1, Rest);
  23. _ ->
  24. stream(Req, ID, Data)
  25. end.
  26. terminate(stop, _, _) ->
  27. ok.