mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-16 13:10:24 +00:00

The 'shutdown' atom has a specific meaning inside OTP. We are instead going to use 'stop' which is pretty much the equivalent of what we actually do. 'shutdown' is now reserved for future special processes implementation.
34 lines
693 B
Erlang
34 lines
693 B
Erlang
%% Feel free to use, reuse and abuse the code in this file.
|
|
|
|
-module(http_loop_stream_recv).
|
|
|
|
-export([init/2]).
|
|
-export([info/3]).
|
|
-export([terminate/3]).
|
|
|
|
init(Req, _) ->
|
|
receive after 100 -> ok end,
|
|
self() ! stream,
|
|
{cowboy_loop, Req, undefined, 100}.
|
|
|
|
info(stream, Req, undefined) ->
|
|
stream(Req, 1, <<>>).
|
|
|
|
stream(Req, ID, Acc) ->
|
|
case cowboy_req:body(Req) of
|
|
{ok, <<>>, Req2} ->
|
|
{stop, cowboy_req:reply(200, Req2), undefined};
|
|
{_, Data, Req2} ->
|
|
parse_id(Req2, ID, << Acc/binary, Data/binary >>)
|
|
end.
|
|
|
|
parse_id(Req, ID, Data) ->
|
|
case Data of
|
|
<< ID:32, Rest/bits >> ->
|
|
parse_id(Req, ID + 1, Rest);
|
|
_ ->
|
|
stream(Req, ID, Data)
|
|
end.
|
|
|
|
terminate(stop, _, _) ->
|
|
ok.
|