🤩
cowboy_websocket の call_result が変わっている
Cowboy の WebSocket の call_result が gen_server っぽい書き方から独自の書き方に(結構前に)切り替わっています。おそらく Cowboy 3.0 で今の書き方が deprecated になると思うので、準備しておきましょう。
{ok, State}
や {reply, [frame()], State}
から {[], State}
という [] ベースの書き方になりました。この [] の中にコマンドを追加していきます。
text の値を戻す場合は {text, <<"abc">>}
とかを入れます。何もしないときは [] のままです。
終了するときは close フレームを投げます。今まであった stop はもうなくなりましたので、終了する場合はかならず close フレームを投げる必要があります。これ相当良い変更だと思います。
{[{close, Code, Reason}], State}
感じです。 Code は WebSocket の RFC を読むと良いです。
簡単に書き換えられるので早いうちに書き換えていきましょう。
参考
call_result
-type commands() :: [cow_ws:frame()
| {active, boolean()}
| {deflate, boolean()}
| {set_options, map()}
| {shutdown_reason, any()}
].
-export_type([commands/0]).
-type call_result(State) :: {commands(), State} | {commands(), State, hibernate}.
-type deprecated_call_result(State) :: {ok, State}
| {ok, State, hibernate}
| {reply, cow_ws:frame() | [cow_ws:frame()], State}
| {reply, cow_ws:frame() | [cow_ws:frame()], State, hibernate}
| {stop, State}.
cow_ws:frame()
-type frame() :: close | ping | pong
| {text | binary | close | ping | pong, iodata()}
| {close, close_code(), iodata()}
| {fragment, fin | nofin, text | binary | continuation, iodata()}.
Discussion