-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprime_server.erl
44 lines (33 loc) · 980 Bytes
/
prime_server.erl
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
-module (prime_server).
-behaviour (gen_server).
-export ([start_link/0, new_prime/1]).
-export ([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
new_prime(N) -> gen_server:call(?MODULE, {prime, N}, 20000).
init([]) ->
process_flag(trap_exit, true),
io:format("~p starting~n", [?MODULE]),
{ok, 0}.
handle_call({prime, K}, _From, N) ->
{reply, make_new_prime(K), N+1}.
handle_cast(_Msg, N) ->
{noreply, N}.
handle_info(_Info, N) ->
{noreply, N}.
terminate(_Reason, _N) ->
io:format("~p stopping~n", [?MODULE]),
ok.
code_change(_OldVsn, N, _Extra) ->
{ok, N}.
make_new_prime(K) ->
if
K > 100 ->
alarm_handler:set_alarm(tooHot),
N = lib_primes:make_prime(K),
alarm_handler:clear_alarm(tooHot),
N;
true ->
lib_primes:make_prime(K)
end.