Esteu aquí: Inici Assignatures Programació Concurrent i en Temps Real Erlang: Exemples frequenciaS.erl

frequenciaS.erl

frequenciaS.erl — Erlang source code, 1 kB (1154 bytes)

Continguts del fitxer

-module(frequenciaS).
-export([iniciar/0]).
-export([init/0]).

%% Funcions d'inicialitzaci� per crear i inicialitzar el servidor.
iniciar() ->
	register(frequenciaS, spawn(frequencia, init, [])).

init() ->
	Frequencies = {get_frequencies(), []},
	loop(Frequencies).

% Codificat
get_frequencies() -> [10,11,12,13,14,15].


%% El bucle principal

loop(Frequencies) ->
	receive
		{request, Pid, assignar} ->
			{NovesFrequencies, Reply} = assignar(Frequencies, Pid),
			reply(Pid, Reply),
			loop(NovesFrequencies);
		{request, Pid , {desassignar, Freq}} ->
			NovesFrequencies = desassignar(Frequencies, Freq),
			reply(Pid, ok),
			loop(NovesFrequencies);
		{request, Pid, stop} ->
			reply(Pid, ok)
	end.

reply(Pid, Reply) ->
	Pid ! {reply, Reply}.

% Funcions internes per assignar i alliberar freq��ncies.

assignar({[], Assignat}, _Pid) -> 
	{{[], Assignat}, {error, no_frequencia}};

assignar({[Freq|Lliure], Assignat}, Pid) -> 
	{{Lliure, [{Freq, Pid}|Assignat]}, {ok, Freq}}.

desassignar({Lliure, Assignat}, Freq) -> 
	NouAssignat=lists:keydelete(Freq, 1, Assignat),	{[Freq|Lliure],  NouAssignat}.