diff options
author | Loïc Hoguin <[email protected]> | 2018-09-11 14:33:58 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2018-09-11 14:33:58 +0200 |
commit | 8404b1c908ac890925496ce839e5b2b2b407a6f7 (patch) | |
tree | b717bdc70f5bcf3d355f00f01081a8f00ac5eee8 /test/handlers/ws_init_commands_h.erl | |
parent | 4b385749f2aab90b5c7e44e844159c0221a8790d (diff) | |
download | cowboy-8404b1c908ac890925496ce839e5b2b2b407a6f7.tar.gz cowboy-8404b1c908ac890925496ce839e5b2b2b407a6f7.tar.bz2 cowboy-8404b1c908ac890925496ce839e5b2b2b407a6f7.zip |
Add a commands-based interface to Websocket handlers
This feature is currently experimental. It will become the
preferred way to use Websocket handlers once it becomes
documented.
A commands-based interface enables adding commands without
having to change the interface much. It mirrors the interface
of stream handlers or gen_statem. It will enable adding
commands that have been needed for some time but were not
implemented for fear of making the interface too complex.
Diffstat (limited to 'test/handlers/ws_init_commands_h.erl')
-rw-r--r-- | test/handlers/ws_init_commands_h.erl | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/handlers/ws_init_commands_h.erl b/test/handlers/ws_init_commands_h.erl new file mode 100644 index 0000000..8bae352 --- /dev/null +++ b/test/handlers/ws_init_commands_h.erl @@ -0,0 +1,30 @@ +%% This module takes commands from the x-commands header +%% and returns them in the websocket_init/1 callback. + +-module(ws_init_commands_h). +-behavior(cowboy_websocket). + +-export([init/2]). +-export([websocket_init/1]). +-export([websocket_handle/2]). +-export([websocket_info/2]). + +init(Req=#{pid := Pid}, RunOrHibernate) -> + Commands0 = cowboy_req:header(<<"x-commands">>, Req), + Commands = binary_to_term(base64:decode(Commands0)), + case Commands of + bad -> ct_helper_error_h:ignore(Pid, cowboy_websocket, handler_call, 6); + _ -> ok + end, + {cowboy_websocket, Req, {Commands, RunOrHibernate}}. + +websocket_init(State={Commands, run}) -> + {Commands, State}; +websocket_init(State={Commands, hibernate}) -> + {Commands, State, hibernate}. + +websocket_handle(_, State) -> + {[], State}. + +websocket_info(_, State) -> + {[], State}. |