From 4868c586a3ac3df13dc9e21c30d95c2efd52306d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 11 Nov 2015 19:14:57 +0100 Subject: Use macros --- src/pbx_rose.erl | 115 +++++++++++++++++++++---------------------------------- 1 file changed, 43 insertions(+), 72 deletions(-) diff --git a/src/pbx_rose.erl b/src/pbx_rose.erl index 0c0f09d..b937115 100644 --- a/src/pbx_rose.erl +++ b/src/pbx_rose.erl @@ -8,92 +8,63 @@ -include("opcodes.hrl"). -include("Remote-Operations-Generic-ROS-PDUs.hrl"). -decode({invoke, #'Invoke'{invokeId = Id, opcode = Op, argument = Data}}) -> - pbx_invoke:set(Id), - case Op of - ?MAKECALL -> - ok; - ?BUTTON -> - ok; - ?EVENT -> - {ok, Event} = pbx_event:decode(Data), - io:format("Event: ~p~n", [Event]), - ok; - ?ESCAPE -> - pbx_escape:privateData(pbx_escape:decode(Data)); - ?MONITOR -> - ok; - ?SNAPSHOT -> - ok; - ?STATUS -> - %io:format("Status: ~p~n", [pbx_status:value(Data)]), - %%% pbx_conn:send(return(Id, Op, pbx_status:encode())); - ok; - _ -> - error - end; -decode({returnResult, #'ReturnResult'{invokeId = Id, result = Data}}) -> - pbx_invoke:set(Id), - decode(Data); -decode({returnError, #'ReturnError'{invokeId = Id, errcode = Op, parameter = Data}}) -> - pbx_invoke:set(Id), - case Op of - ?ERROR -> - {ok, Error} = error:decode(Data), - io:format("Error: ~p~n", [Error]) - end, - error; -decode({reject, #'Reject'{invokeId = Id, problem = Problem}}) -> - pbx_invoke:set(Id), - io:format("Problem: ~p~n", [Problem]), - error; -decode(#'ReturnResult_result'{opcode = Op, result = Data}) -> - case Op of - ?MAKECALL -> - {ok, Result} = pbx_dial:decode(Data), - io:format("Make call: ~p~n", [Result]); - ?BUTTON -> - {ok, List} = pbx_button:decode(Data), - io:format("List: ~p~n", [List]); - ?MONITOR -> - {ok, Status} = pbx_monitor:decode(Data), - io:format("Result: ~p~n", [Status]); - ?SNAPSHOT -> - {ok, Status} = pbx_snapshot:decode(Data), - io:format("Result: ~p~n", [Status]); - _ -> - io:format("Result: ~p~n", [Data]) - end, - ok; -decode(<>) -> - {ok, Pdu} = 'Remote-Operations-Generic-ROS-PDUs':decode('ROS', Data), - decode(Pdu). +-define(INVOKE(Id, Op, Data), #'Invoke'{invokeId = Id, opcode = Op, argument = Data}). +-define(RESULT(Id, Op, Data), #'ReturnResult'{invokeId = Id, result = #'ReturnResult_result'{opcode = Op, result = Data}}). %%% init(_Args) -> {ok, {present, 0}}. -handle_event({invoke, Invoke = #'Invoke'{opcode = ?STATUS}}, _State) -> - case pbx_status:decode(Invoke#'Invoke'.argument) of +handle_event({invoke, Invoke = #'Invoke'{invokeId = Id, opcode = ?STATUS, argument = Data}}, _State) -> + case pbx_status:decode(Data) of normal -> reply(Invoke, pbx_status:encode()); _ -> ok end, - {ok, Invoke#'Invoke'.invokeId}; -handle_event({invoke, Invoke = #'Invoke'{}}, _State) -> + {ok, Id}; +handle_event({invoke, ?INVOKE(Id, ?EVENT, Data)}, _State) -> + {ok, Event} = pbx_event:decode(Data), + io:format("Event: ~p~n", [Event]), + {ok, Id}; +handle_event({invoke, ?INVOKE(Id, ?ESCAPE, Data)}, _State) -> + Esc = pbx_escape:decode(Data), + Priv = pbx_escape:privateData(Esc), + io:format("Escape: ~p~n", [Priv]), + {ok, Id}; +handle_event({invoke, Invoke = #'Invoke'{invokeId = Id}}, _State) -> io:format("Invoke ~p~n", [Invoke]), - {ok, Invoke#'Invoke'.invokeId}; -handle_event({returnResult, ReturnResult = #'ReturnResult'{}}, _State) -> - io:format("ReturnResult ~p~n", [ReturnResult]), - {ok, ReturnResult#'ReturnResult'.invokeId}; -handle_event({returnError, ReturnError = #'ReturnError'{}}, _State) -> + {ok, Id}; +handle_event({returnResult, ?RESULT(Id, ?MAKECALL, Data)}, _State) -> + {ok, Result} = pbx_dial:decode(Data), + io:format("Makecall ~p~n", [Result]), + {ok, Id}; +handle_event({returnResult, ?RESULT(Id, ?BUTTON, Data)}, _State) -> + {ok, Result} = pbx_button:decode(Data), + io:format("Button ~p~n", [Result]), + {ok, Id}; +handle_event({returnResult, ?RESULT(Id, ?MONITOR, Data)}, _State) -> + {ok, Result} = pbx_monitor:decode(Data), + io:format("Monitor ~p~n", [Result]), + {ok, Id}; +handle_event({returnResult, ?RESULT(Id, ?SNAPSHOT, Data)}, _State) -> + {ok, Result} = pbx_snapshot:decode(Data), + io:format("Snapshot ~p~n", [Result]), + {ok, Id}; +handle_event({returnResult, #'ReturnResult'{invokeId = Id, result = Result}}, _State) -> + io:format("Result ~p~n", [Result]), + {ok, Id}; +handle_event({returnError, #'ReturnError'{invokeId = Id, errcode = ?ERROR, parameter = Par}}, _State) -> + {ok, Error} = error:decode(Par), + io:format("Error: ~p~n", [Error]), + {ok, Id}; +handle_event({returnError, ReturnError = #'ReturnError'{invokeId = Id}}, _State) -> io:format("ReturnError ~p~n", [ReturnError]), - {ok, ReturnError#'ReturnError'.invokeId}; -handle_event({reject, Reject = #'Reject'{problem = Problem}}, _State) -> + {ok, Id}; +handle_event({reject, #'Reject'{invokeId = Id, problem = Problem}}, _State) -> io:format("Reject ~p~n", [Problem]), - {ok, Reject#'Reject'.invokeId}; + {ok, Id}; handle_event(_Event, State) -> {ok, State}. -- cgit v1.2.3