diff options
author | Marco Ziener <mziener@lavabit.com> | 2010-10-13 15:27:56 +0200 |
---|---|---|
committer | Marco Ziener <mziener@lavabit.com> | 2010-10-13 15:27:56 +0200 |
commit | 4ba5338d3279cd75106aa96810b91e35e692a49f (patch) | |
tree | 2d5f3a2a37c43f1b0461689ac911f49c992b83cd | |
parent | 86442139036c7d1b8be83b60d43197a618ac93c6 (diff) | |
parent | d1c3af4f92f169853262dcc7f6c58bdd287c21ca (diff) | |
download | erlang-4ba5338d3279cd75106aa96810b91e35e692a49f.tar.gz erlang-4ba5338d3279cd75106aa96810b91e35e692a49f.tar.xz erlang-4ba5338d3279cd75106aa96810b91e35e692a49f.zip |
Merge branch 'master' of ssh://git.animux.de/erlang
-rw-r--r-- | client/client.erl | 31 | ||||
-rw-r--r-- | server/client.erl | 8 | ||||
-rw-r--r-- | server/dispatcher.erl | 10 |
3 files changed, 43 insertions, 6 deletions
diff --git a/client/client.erl b/client/client.erl new file mode 100644 index 0000000..9781b74 --- /dev/null +++ b/client/client.erl @@ -0,0 +1,31 @@ +-module(client). +-export([register/3, login/3, list/0, logged_in/1]). + +register(Server, Name, Password) -> + rpc:call(Server, client, register, [self(), {Name, Password}]), + receive + {_, ok, Msg} -> + Msg; + {_, error, Msg} -> + Msg + end. + +login(Server, Name, Password) -> + rpc:call(Server, client, login, [self(), {Name, Password}]), + receive + {_, ok, {ok, {logged_in, Client}}} -> + register(cli, spawn(client, logged_in, [Client])); + {_, error, Msg} -> + Msg + end. + +list() -> + cli ! {list}. + +logged_in(Client) -> + receive + {list} -> + Client ! {list}; + _ -> + logged_in(Client) + end. diff --git a/server/client.erl b/server/client.erl index 72658b7..7139e67 100644 --- a/server/client.erl +++ b/server/client.erl @@ -1,5 +1,5 @@ -module(client). --export([start/1, loop/1]). +-export([start/1, loop/1, register/2, login/2]). start(Client) -> spawn(client, loop, Client). @@ -13,3 +13,9 @@ loop(Client) -> Client ! {error, unknown_command}, loop(Client) end. + +register(Client, {Name, Password}) -> + dis ! {Client, {register, {Name, Password}}}. + +login(Client, {Name, Password}) -> + dis ! {Client, {login, {Name, Password}}}. diff --git a/server/dispatcher.erl b/server/dispatcher.erl index 86b2627..a296c78 100644 --- a/server/dispatcher.erl +++ b/server/dispatcher.erl @@ -8,18 +8,18 @@ init() -> dict:new(). handle(_, {register, {User, Password}}, Dict) -> - case dict:find(User) of - {ok, _} -> + case dict:find(User, Dict) of + {ok, _}-> {{error, duplicated_user}, Dict}; - true -> + _ -> {{ok, user_created}, dict:store(User, Password, Dict)} end; handle(From, {login, {User, Password}}, Dict) -> - case dict:find(User) of + case dict:find(User, Dict) of {ok, Password} -> {{ok, {logged_in, client:start(From)}}, Dict}; - true -> + _ -> {{error, user_or_password_invalid}, Dict} end; |