aboutsummaryrefslogblamecommitdiffstats
path: root/client/client.erl
blob: d0bae4c41a344ce041ad6b00eab49e542f45ae8b (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
                














                                                   





                                                                  

                                   
                                                      



                          
                        


                                


                                      

                            
                                                                   
                   



                                                       






                               

        

                           
            
                                 


                                  
        
 

                       
           



                          

        

                                      
 

                                              
-module(client).
-export([register/3, login/3, list/0, handle/2]).

contains([], _) ->
    false;
contains([H|_], H) ->
    true;
contains([_|T], Search) ->
    contains(T, Search).

checkLogin(Value) ->
    checkLogin(Value, contains(registered(), cli)).
checkLogin(Value, Value) ->
    true;
checkLogin(_, _) ->
    throw({error, login_state}).

buildNode(Server) ->
    list_to_atom("distributed_music_system_main_node@" ++ Server).

rpc(Server, Function, Params) ->
    rpc:call(buildNode(Server), client, Function, Params).

register(Server, Name, Password) ->
    rpc(Server, register, [self(), {Name, Password}]),
    receive
	{_, ok, Msg} ->
	    Msg;
	{_, error, Msg} ->
	    {error, Msg}
    end.

login(Server, Name, Password) ->
    code:purge(server),
    code:load_abs("../common/server"),

    try checkLogin(false) of
	_ ->
	    rpc(Server, login, [self(), {node(), Name, Password}]),
	    receive
		{_, ok, {ok, {logged_in, {Pid, _}}}} ->
		    server:registration(Pid, cli),
		    {ok, logged_in};
		{_, _, Msg} ->
		    Msg;
		Msg ->
		    Msg
	    end
    catch
	{error, login_state} ->
	    {error, logged_in}
    end.

list() ->
    try checkLogin(true) of
	_ ->
	    server:rpc(cli, list)
    catch
	{error, login_state} ->
	    {error, not_logged_in}
    end.

handle(list, Server) ->
    Server ! list,
    receive
    	{ok, Msg} ->
    	    {Msg, Server};
    	Msg ->
    	    {Msg, Server}
    end;

handle({change_state, NewState}, _) ->
    {{ok}, NewState};

handle(Cmd, Server) ->
    {{error, {unknown_command, Cmd}}, Server}.