Ковбойские и случайные события websocket_handle

Я использую ковбой и jiffy (библиотека Json) для своей websocket.. Я могу получить данные от клиента в моем websocket_handle, так как сейчас у меня есть код, подобный этому

websocket_handle({text, Msg}, Req, Handle) ->
    Message = jiffy:decode(Msg),
    case Message of  

pattern1 -> ........... pattern2 -> .......... end, {ok, Res, State}

Однако вместо этого я хотел бы сопоставить шаблон на уровне дескриптора...

  websocket_handle({text, pattern1}, Req, State),
  websocket_handle({text, pattern2}, Req, State)

Проблема в том, что я не могу использовать jiffy:decode в параметре websocket_handle.. поэтому я не могу написать что-то вроде

 websocket_handle({text, jiffy:decode(Msg), Req, State})

Как заставить это работать???

2 ответа

Решение

Если вам нравится сопоставление с образцом в сигнатуре функции против выражения case, вы можете "переслать" декодированное сообщение другой "внутренней" функции.

websocket_handle({text, Msg}, Req, Handle) ->
    Message = jiffy:decode(Msg),
    websocket_handle_({test, Message}, Req, Handle).

websocket_handle_({text, Pattern1}, Req, Handle) ->
    {ok, Req, State}; 
websocket_handle_({text, Pattern2}, Req, Handle) ->
    {reply, OutFrame | [OutFrame], Req, State};
websocket_handle_({text, PatternN}, Req, Handle) ->
    {ok, Req, State}.

Так что просто измените на

websocket_handle({text, Msg}, Req, Handle) ->
    websocket_handle_({text, jiffy:decode(Msg)}, Req, Handle).

websocket_handle_({text, Pattern1}, Req, Handle) ->
    %% do stuff,
   {ok, Req, State};
websocket_handle_({text, Pattern2}, Req, Handle) ->
    %% do stuff,
     {reply, [OutFrame], Req, State};
websocket_handle_({text, PatternN}, Req, Handle) ->
    %% do stuff,
     {reply, OutFrame, Req, State}.
Другие вопросы по тегам