diff options
| author | Nathan Lasseter <nathan.je.lasseter@googlemail.com> | 2011-01-27 21:38:12 +0000 | 
|---|---|---|
| committer | Nathan Lasseter <nathan.je.lasseter@googlemail.com> | 2011-01-27 21:38:12 +0000 | 
| commit | cf34ae552e7e64d9cf0c2d0faa334d3ee51169b3 (patch) | |
| tree | 61898fa118d8e8c7b8016c45cdbd8a8452fb0972 | |
| parent | 48a36fbed500801455d6cdc268cd690ac057fff5 (diff) | |
Made it more generic.
| -rw-r--r-- | erlbal.erl | 48 | 
1 files changed, 25 insertions, 23 deletions
| @@ -1,50 +1,52 @@  -module(erlbal). --export([make_request/0, start_bal/0, kill_bal/0, start_server/1]). +-export([make_request/2, start_bal/1, kill_bal/1, start_server/2]). -start_server(ID) -> -	PID = spawn(fun() -> serverloop(ID) end), -	balancer ! {add_node, PID}. +start_server(Balancer, Fun) -> +	PID = spawn(fun() -> server_loop(Balancer, Fun) end), +	Balancer ! {add_node, PID}. -serverloop(ID) -> +server_loop(Balancer, Fun) ->  	receive -		{request, From} -> -			balancer ! {response, From, ID}, -			serverloop(ID); +		{request, From, ARGS} -> +			Ret = Fun(ARGS), +			Balancer ! {response, From, Ret}, +			server_loop(Balancer, Fun);  		die ->  			ok  	end. -start_bal() -> -	register(balancer, spawn(fun() -> balloop([], 1) end)). +start_bal(Name) -> +	register(Name, spawn(fun() -> bal_loop([], 1) end)). -kill_bal() -> -	balancer ! die. +kill_bal(Balancer) -> +	Balancer ! die, +	unregister(Balancer). -balloop(Serverlist, Nextserver) -> +bal_loop(Serverlist, Nextserver) ->  	receive  		{add_node, PID} -> -			balloop(Serverlist ++ [PID], Nextserver); -		{request, From} -> +			bal_loop(Serverlist ++ [PID], Nextserver); +		{request, From, ARGS} ->  			Serv = lists:nth(Nextserver, Serverlist), -			Serv ! {request, From}, +			Serv ! {request, From, ARGS},  			NS = Nextserver + 1,  			SLL = length(Serverlist),  			if  				NS > SLL -> -					balloop(Serverlist, 1); +					bal_loop(Serverlist, 1);  				true -> -					balloop(Serverlist, Nextserver+1) +					bal_loop(Serverlist, Nextserver+1)  			end; -		{response, To, ID} -> -			To ! ID, -			balloop(Serverlist, Nextserver); +		{response, To, Ret} -> +			To ! Ret, +			bal_loop(Serverlist, Nextserver);  		die ->  			lists:foreach(fun(X) -> X ! die end, Serverlist)  	end. -make_request() -> -	balancer ! {request, self()}, +make_request(Balancer, ARGS) -> +	Balancer ! {request, self(), ARGS},  	receive  		ID ->  			ID | 
