1

Websocket にカウボーイと jiffy (Json ライブラリ) を使用しています。現在、websocket_handle でクライアントからデータを受け取ることができます。

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

       パターン 1 -> ........... パターン 2 -> ......... 終わり、{ok、Res、状態}

ただし、これの代わりに、ハンドル レベルでパターン マッチを行いたいと考えています...

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

問題は、websocket_handle のパラメーターで jiffy:decode を使用できないことです。そのため、次のようなものを書くことができません

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

それを機能させる方法??? 

4

2 に答える 2

5

関数シグネチャとケース式のパターン マッチングが必要な場合は、デコードされたメッセージを別の「内部」関数に「転送」できます。

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}.
于 2013-06-12T06:53:06.627 に答える
1

だからちょうどに変更します

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}.
于 2013-06-12T09:00:03.053 に答える