diff options
Diffstat (limited to '')
-rw-r--r-- | common/server.erl | 2 | ||||
-rw-r--r-- | server/client.erl | 44 | ||||
-rw-r--r-- | server/dispatcher.erl | 4 |
3 files changed, 19 insertions, 31 deletions
diff --git a/common/server.erl b/common/server.erl index a718be9..67fb000 100644 --- a/common/server.erl +++ b/common/server.erl @@ -18,7 +18,7 @@ start_on_node(Node, Mod, State) -> wait_response(_, Ref) -> receive - {Ref, crash} -> exit(rpc); + {Ref, crash} -> exit(rpc); {Ref, ok, Response} -> Response end. diff --git a/server/client.erl b/server/client.erl index 333df4a..cb6504e 100644 --- a/server/client.erl +++ b/server/client.erl @@ -14,43 +14,31 @@ start(Node) -> {error, {unknown_error, Why}} end. +execute(Client, F) -> + %% execute F() with error handling + %% (sends error message on exception) + try F() of + Result -> + Client ! {ok, Result} + catch + _: Why -> + Client ! {error, Why} + end. + loop(Client) -> + %% mainloop for client modul in server receive list -> - try media:all() of - Result -> - Client ! {ok, Result} - catch - _: Why -> - Client ! {error, Why} - end; + execute(Client, fun() -> media:all() end); get_votes -> - try media:getVotes(Client) of - Result -> - Client ! {ok, Result} - catch - _: Why -> - Client ! {error, Why} - end; + execute(Client, fun() -> media:getVotes(Client) end); {vote, Artist, Title} -> - try media:vote(Artist, Title) of - Result -> - Client ! {ok, Result} - catch - _: Why -> - Client ! {error, Why} - end; + execute(Client, fun() -> media:vote(Artist, Title) end); {devote, Artist, Title} -> - try media:devote(Artist, Title) of - Result -> - Client ! {ok, Result} - catch - _: Why -> - Client ! {error, Why} - end; + execute(Client, fun() -> media:devote(Artist, Title) end); Cmd -> Client ! {error, {unknown_command, Cmd}} diff --git a/server/dispatcher.erl b/server/dispatcher.erl index 9b4c61b..77e4ab9 100644 --- a/server/dispatcher.erl +++ b/server/dispatcher.erl @@ -34,8 +34,8 @@ handle({login, {Node, User, Password}}, Dict) -> case client:start(Node) of {ok, Pid} -> {{ok, {logged_in, Pid}}, Dict}; - _ -> - {{error, unable_to_login}, Dict} + Why -> + {{error, {unable_to_login, Why}}, Dict} end; _ -> {{error, user_or_password_invalid}, Dict} |