From cc2e084d456c99b3d71f09c08f516195b6015dae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Mon, 27 Aug 2012 12:46:42 +0200 Subject: Update behaviours for R15B+ This effectively drops the R14B compatibility. The cowboy_req:req() type will be introduced in a future commit. It refers to the #http_req{} record. --- src/cowboy_loop_handler.erl | 57 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/cowboy_loop_handler.erl (limited to 'src/cowboy_loop_handler.erl') diff --git a/src/cowboy_loop_handler.erl b/src/cowboy_loop_handler.erl new file mode 100644 index 0000000..5ff86cf --- /dev/null +++ b/src/cowboy_loop_handler.erl @@ -0,0 +1,57 @@ +%% Copyright (c) 2011-2012, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +%% @doc Behaviour for long-lived HTTP handlers. +%% +%% init/3 allows you to initialize a state for all subsequent +%% callbacks, and indicate to Cowboy whether you accept to handle the +%% request or want to shutdown without handling it, in which case the +%% receive loop and info/3 calls will simply be skipped. +%% +%% info/3 allows you to handle the messages this process will +%% receive. It receives the message and the state previously defined. +%% It can decide to stop the receive loop or continue receiving. +%% +%% terminate/2 allows you to clean up. It receives the state +%% previously defined. +%% +%% There is no required operation to perform in any of these callbacks +%% other than returning the proper values. Make sure you always return +%% the last modified Req so that Cowboy has the up to date information +%% about the request. +%% +%% It is recommended to use hibernate if this process is not going to +%% receive a lot of messages. It is also recommended to use a timeout +%% value so that the connection gets closed after a long period of +%% inactivity. +-module(cowboy_loop_handler). + +-type opts() :: any(). +-type state() :: any(). + +-callback init({atom(), http}, Req, opts()) + -> {ok, Req, state()} + | {loop, Req, state()} + | {loop, Req, state(), hibernate} + | {loop, Req, state(), timeout()} + | {loop, Req, state(), timeout(), hibernate} + | {shutdown, Req, state()} + | {upgrade, protocol, module()} + when Req::cowboy_req:req(). +-callback info(any(), Req, State) + -> {ok, Req, State} + | {loop, Req, State} + | {loop, Req, State, hibernate} + when Req::cowboy_req:req(), State::state(). +-callback terminate(cowboy_req:req(), state()) -> ok. -- cgit v1.2.3