mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 12:20:24 +00:00
Remove Req from the Websocket interface
After the switch to Websocket, we are no longer in a request/response scenario, therefore a lot of the cowboy_req functions do not apply anymore. Any data required from the request will need to be taken from Req in init/2 and saved in the handler's state.
This commit is contained in:
parent
b63b6ef865
commit
d1b65a67cf
7 changed files with 161 additions and 169 deletions
|
@ -3,18 +3,18 @@
|
|||
-module(ws_echo).
|
||||
|
||||
-export([init/2]).
|
||||
-export([websocket_handle/3]).
|
||||
-export([websocket_info/3]).
|
||||
-export([websocket_handle/2]).
|
||||
-export([websocket_info/2]).
|
||||
|
||||
init(Req, _) ->
|
||||
{cowboy_websocket, Req, undefined}.
|
||||
|
||||
websocket_handle({text, Data}, Req, State) ->
|
||||
{reply, {text, Data}, Req, State};
|
||||
websocket_handle({binary, Data}, Req, State) ->
|
||||
{reply, {binary, Data}, Req, State};
|
||||
websocket_handle(_Frame, Req, State) ->
|
||||
{ok, Req, State}.
|
||||
websocket_handle({text, Data}, State) ->
|
||||
{reply, {text, Data}, State};
|
||||
websocket_handle({binary, Data}, State) ->
|
||||
{reply, {binary, Data}, State};
|
||||
websocket_handle(_Frame, State) ->
|
||||
{ok, State}.
|
||||
|
||||
websocket_info(_Info, Req, State) ->
|
||||
{ok, Req, State}.
|
||||
websocket_info(_Info, State) ->
|
||||
{ok, State}.
|
||||
|
|
|
@ -3,26 +3,26 @@
|
|||
-module(ws_echo_timer).
|
||||
|
||||
-export([init/2]).
|
||||
-export([websocket_init/2]).
|
||||
-export([websocket_handle/3]).
|
||||
-export([websocket_info/3]).
|
||||
-export([websocket_init/1]).
|
||||
-export([websocket_handle/2]).
|
||||
-export([websocket_info/2]).
|
||||
|
||||
init(Req, _) ->
|
||||
{cowboy_websocket, Req, undefined}.
|
||||
|
||||
websocket_init(Req, State) ->
|
||||
websocket_init(State) ->
|
||||
erlang:start_timer(1000, self(), <<"websocket_init">>),
|
||||
{ok, Req, State}.
|
||||
{ok, State}.
|
||||
|
||||
websocket_handle({text, Data}, Req, State) ->
|
||||
{reply, {text, Data}, Req, State};
|
||||
websocket_handle({binary, Data}, Req, State) ->
|
||||
{reply, {binary, Data}, Req, State};
|
||||
websocket_handle(_Frame, Req, State) ->
|
||||
{ok, Req, State}.
|
||||
websocket_handle({text, Data}, State) ->
|
||||
{reply, {text, Data}, State};
|
||||
websocket_handle({binary, Data}, State) ->
|
||||
{reply, {binary, Data}, State};
|
||||
websocket_handle(_Frame, State) ->
|
||||
{ok, State}.
|
||||
|
||||
websocket_info({timeout, _Ref, Msg}, Req, State) ->
|
||||
websocket_info({timeout, _Ref, Msg}, State) ->
|
||||
erlang:start_timer(1000, self(), <<"websocket_handle">>),
|
||||
{reply, {text, Msg}, Req, State};
|
||||
websocket_info(_Info, Req, State) ->
|
||||
{ok, Req, State}.
|
||||
{reply, {text, Msg}, State};
|
||||
websocket_info(_Info, State) ->
|
||||
{ok, State}.
|
||||
|
|
|
@ -3,19 +3,19 @@
|
|||
-module(ws_send_many).
|
||||
|
||||
-export([init/2]).
|
||||
-export([websocket_init/2]).
|
||||
-export([websocket_handle/3]).
|
||||
-export([websocket_info/3]).
|
||||
-export([websocket_init/1]).
|
||||
-export([websocket_handle/2]).
|
||||
-export([websocket_info/2]).
|
||||
|
||||
init(Req, Opts) ->
|
||||
{cowboy_websocket, Req, Opts}.
|
||||
|
||||
websocket_init(Req, State) ->
|
||||
websocket_init(State) ->
|
||||
erlang:send_after(10, self(), send_many),
|
||||
{ok, Req, State}.
|
||||
{ok, State}.
|
||||
|
||||
websocket_handle(_Frame, Req, State) ->
|
||||
{ok, Req, State}.
|
||||
websocket_handle(_Frame, State) ->
|
||||
{ok, State}.
|
||||
|
||||
websocket_info(send_many, Req, State = [{sequence, Sequence}]) ->
|
||||
{reply, Sequence, Req, State}.
|
||||
websocket_info(send_many, State = [{sequence, Sequence}]) ->
|
||||
{reply, Sequence, State}.
|
||||
|
|
|
@ -3,16 +3,16 @@
|
|||
-module(ws_subprotocol).
|
||||
|
||||
-export([init/2]).
|
||||
-export([websocket_handle/3]).
|
||||
-export([websocket_info/3]).
|
||||
-export([websocket_handle/2]).
|
||||
-export([websocket_info/2]).
|
||||
|
||||
init(Req, Opts) ->
|
||||
[Protocol | _] = cowboy_req:parse_header(<<"sec-websocket-protocol">>, Req),
|
||||
Req2 = cowboy_req:set_resp_header(<<"sec-websocket-protocol">>, Protocol, Req),
|
||||
{cowboy_websocket, Req2, Opts, 1000}.
|
||||
|
||||
websocket_handle(_Frame, Req, State) ->
|
||||
{ok, Req, State}.
|
||||
websocket_handle(_Frame, State) ->
|
||||
{ok, State}.
|
||||
|
||||
websocket_info(_Info, Req, State) ->
|
||||
{ok, Req, State}.
|
||||
websocket_info(_Info, State) ->
|
||||
{ok, State}.
|
||||
|
|
|
@ -3,18 +3,18 @@
|
|||
-module(ws_timeout_cancel).
|
||||
|
||||
-export([init/2]).
|
||||
-export([websocket_handle/3]).
|
||||
-export([websocket_info/3]).
|
||||
-export([websocket_handle/2]).
|
||||
-export([websocket_info/2]).
|
||||
|
||||
init(Req, _) ->
|
||||
erlang:start_timer(500, self(), should_not_cancel_timer),
|
||||
{cowboy_websocket, Req, undefined, 1000}.
|
||||
|
||||
websocket_handle({text, Data}, Req, State) ->
|
||||
{reply, {text, Data}, Req, State};
|
||||
websocket_handle({binary, Data}, Req, State) ->
|
||||
{reply, {binary, Data}, Req, State}.
|
||||
websocket_handle({text, Data}, State) ->
|
||||
{reply, {text, Data}, State};
|
||||
websocket_handle({binary, Data}, State) ->
|
||||
{reply, {binary, Data}, State}.
|
||||
|
||||
websocket_info(_Info, Req, State) ->
|
||||
websocket_info(_Info, State) ->
|
||||
erlang:start_timer(500, self(), should_not_cancel_timer),
|
||||
{ok, Req, State}.
|
||||
{ok, State}.
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
-module(ws_timeout_hibernate).
|
||||
|
||||
-export([init/2]).
|
||||
-export([websocket_handle/3]).
|
||||
-export([websocket_info/3]).
|
||||
-export([websocket_handle/2]).
|
||||
-export([websocket_info/2]).
|
||||
|
||||
init(Req, _) ->
|
||||
{cowboy_websocket, Req, undefined, 1000, hibernate}.
|
||||
|
||||
websocket_handle(_Frame, Req, State) ->
|
||||
{ok, Req, State, hibernate}.
|
||||
websocket_handle(_Frame, State) ->
|
||||
{ok, State, hibernate}.
|
||||
|
||||
websocket_info(_Info, Req, State) ->
|
||||
{ok, Req, State, hibernate}.
|
||||
websocket_info(_Info, State) ->
|
||||
{ok, State, hibernate}.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue