Skip to content

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
client server erl
-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}.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.