aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--common/server.erl2
-rw-r--r--server/client.erl44
-rw-r--r--server/dispatcher.erl4
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}