|
| 1 | +%%%------------------------------------------------------------------- |
| 2 | +%%% @doc |
| 3 | +%%% Prime tester gen server implementation. This gen server is the |
| 4 | +%%% actual worker process that performs the computation to determine |
| 5 | +%%% if the number is prime. |
| 6 | +%%% @end |
| 7 | +%%%------------------------------------------------------------------- |
| 8 | +-module(prime_tester_worker). |
| 9 | + |
| 10 | +-behaviour(gen_server). |
| 11 | + |
| 12 | +%% API |
| 13 | +-export([start_link/0, is_prime/1]). |
| 14 | + |
| 15 | +%% gen_server callbacks |
| 16 | +-export([init/1, |
| 17 | +handle_call/3, |
| 18 | +handle_cast/2, |
| 19 | +handle_info/2, |
| 20 | +terminate/2, |
| 21 | +code_change/3]). |
| 22 | + |
| 23 | +-define(SERVER, ?MODULE). |
| 24 | + |
| 25 | +-record(state,{}). |
| 26 | + |
| 27 | +%%%=================================================================== |
| 28 | +%%% API |
| 29 | +%%%=================================================================== |
| 30 | + |
| 31 | +%%-------------------------------------------------------------------- |
| 32 | +%% @doc |
| 33 | +%% Starts the server |
| 34 | +%% |
| 35 | +%% @spec start_link() ->{ok, Pid} | ignore |{error, Error} |
| 36 | +%% @end |
| 37 | +%%-------------------------------------------------------------------- |
| 38 | +start_link() -> |
| 39 | +gen_server:start_link({local, ?SERVER}, ?MODULE, [], []). |
| 40 | + |
| 41 | +is_prime(Number) whenis_integer(Number) -> |
| 42 | +gen_server:call(?MODULE,{is_prime, Number}). |
| 43 | + |
| 44 | +%%%=================================================================== |
| 45 | +%%% gen_server callbacks |
| 46 | +%%%=================================================================== |
| 47 | + |
| 48 | +%%-------------------------------------------------------------------- |
| 49 | +%% @private |
| 50 | +%% @doc |
| 51 | +%% Initializes the server |
| 52 | +%% |
| 53 | +%% @spec init(Args) ->{ok, State} | |
| 54 | +%%{ok, State, Timeout} | |
| 55 | +%% ignore | |
| 56 | +%%{stop, Reason} |
| 57 | +%% @end |
| 58 | +%%-------------------------------------------------------------------- |
| 59 | +init([]) -> |
| 60 | +{ok, #state{}}. |
| 61 | + |
| 62 | +%%-------------------------------------------------------------------- |
| 63 | +%% @private |
| 64 | +%%-------------------------------------------------------------------- |
| 65 | +handle_call({is_prime, Number}, _From, State) -> |
| 66 | +% Invoke lib_primes:is_prime to determine if the number is prime or not |
| 67 | +Result=lib_primes:is_prime(Number), |
| 68 | +{reply,{ok, Result}, State}; |
| 69 | + |
| 70 | +handle_call(_Request, _From, State) -> |
| 71 | +Reply=ok, |
| 72 | +{reply, Reply, State}. |
| 73 | + |
| 74 | +%%-------------------------------------------------------------------- |
| 75 | +%% @private |
| 76 | +%%-------------------------------------------------------------------- |
| 77 | +handle_cast(_Msg, State) -> |
| 78 | +{noreply, State}. |
| 79 | + |
| 80 | +%%-------------------------------------------------------------------- |
| 81 | +%% @private |
| 82 | +%%-------------------------------------------------------------------- |
| 83 | +handle_info(_Info, State) -> |
| 84 | +{noreply, State}. |
| 85 | + |
| 86 | +%%-------------------------------------------------------------------- |
| 87 | +%% @private |
| 88 | +%%-------------------------------------------------------------------- |
| 89 | +terminate(_Reason, _State) -> |
| 90 | +ok. |
| 91 | + |
| 92 | +%%-------------------------------------------------------------------- |
| 93 | +%% @private |
| 94 | +%%-------------------------------------------------------------------- |
| 95 | +code_change(_OldVsn, State, _Extra) -> |
| 96 | +{ok, State}. |
| 97 | + |
| 98 | +%%%=================================================================== |
| 99 | +%%% Internal functions |
| 100 | +%%%=================================================================== |
0 commit comments