public
Created

client server erl

  • Download Gist
cs.erl
Erlang
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
-module(f).
 
-export([init/0]).
-export([start/0, get_freq/0, stop/0]).
-export([allocate/0, deallocate/1]).
 
%%
%% server functions
%%
 
start()->
register(f, spawn(f, init, [])).
 
init() ->
Freq = {get_freq(), []},
loop(Freq).
 
get_freq()->
[10,11,12,13,14,15].
 
%
% client functions
%
 
stop() -> call(stop).
 
allocate() -> call(allocate).
 
deallocate(Freq) -> call({deallocate, Freq}).
 
call( Message ) ->
f ! { request, self(), Message },
receive
{reply, Reply} ->
Reply
end.
 
%
% The main loop
%
 
loop(Frequencies) ->
receive
{request, Pid, allocate} ->
{NewFreq, Reply} = allocate(Frequencies, Pid),
reply(Pid, Reply),
loop(NewFreq);
{request, Pid, {deallocate, Freq}} ->
NewFreq = deallocate(Frequencies, Freq),
reply(Pid, ok),
loop(NewFreq);
{request, Pid, stop} ->
reply(Pid, ok)
end.
 
reply(Pid, Reply) ->
Pid ! Reply.
 
%
% allocate & deallocate
%
 
allocate({[], Allocated}, _Pid)->
{{[], Allocated}, {error, no_freqquency}};
allocate({[Freq | Free], Allocated}, Pid) ->
{{Free, [{Freq , Pid} | Allocated]}, {ok, Freq}}.
 
deallocate({Free, Allocated}, Freq) ->
NewAlloc = lists:keydelete(Freq, 1, Allocated),
{[Freq | Free], NewAlloc}.

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.