diff options
Diffstat (limited to 'learn-you-some-erlang/m8ball/src/m8ball_server.erl')
-rw-r--r-- | learn-you-some-erlang/m8ball/src/m8ball_server.erl | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/learn-you-some-erlang/m8ball/src/m8ball_server.erl b/learn-you-some-erlang/m8ball/src/m8ball_server.erl new file mode 100644 index 0000000..4e821ad --- /dev/null +++ b/learn-you-some-erlang/m8ball/src/m8ball_server.erl @@ -0,0 +1,46 @@ +-module(m8ball_server). +-behaviour(gen_server). +-export([start_link/0, stop/0, ask/1]). +-export([init/1, handle_call/3, handle_cast/2, handle_info/2, + code_change/3, terminate/2]). + +%%%%%%%%%%%%%%%%% +%%% INTERFACE %%% +%%%%%%%%%%%%%%%%% +start_link() -> + gen_server:start_link({global, ?MODULE}, ?MODULE, [], []). + +stop() -> + gen_server:call({global, ?MODULE}, stop). + +ask(_Question) -> % the question doesn't matter! + gen_server:call({global, ?MODULE}, question). + +%%%%%%%%%%%%%%%%% +%%% CALLBACKS %%% +%%%%%%%%%%%%%%%%% +init([]) -> + <<A:32, B:32, C:32>> = crypto:rand_bytes(12), + random:seed(A,B,C), + {ok, []}. + +handle_call(question, _From, State) -> + {ok, Answers} = application:get_env(m8ball, answers), + Answer = element(random:uniform(tuple_size(Answers)), Answers), + {reply, Answer, State}; +handle_call(stop, _From, State) -> + {stop, normal, ok, State}; +handle_call(_Call, _From, State) -> + {noreply, State}. + +handle_cast(_Cast, State) -> + {noreply, State}. + +handle_info(_Info, State) -> + {noreply, State}. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +terminate(_Reason, _State) -> + ok. |