-module(server). -behaviour(gen_server). -export([main/0]). -export([start_link/0, stop/0]). -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). %%============================================================================== %% Server API %%============================================================================== start_link() -> Result = gen_server:start_link({local, server}, server, [], []), io:fwrite("Server started.~n"), Result. stop() -> gen_server:cast(server, shutdown). message(Msg) -> gen_server:cast(server, Msg). %%============================================================================== %% gen_server callbacks %%============================================================================== init([]) -> file:open("server_log.txt", [write]). handle_call(_Msg, _From, Fd) -> {reply, ok, Fd}. handle_cast(shutdown, Fd) -> {stop, normal, Fd}; handle_cast(Msg, Fd) -> io:fwrite("Server writing into file: '~p'.~n", [Msg]), io:format(Fd, "~w~n", [Msg]), {noreply, Fd}. code_change(_OldVsn, Fd, _Extra) -> {ok, Fd}. terminate(_Reason, Fd) -> io:fwrite("Server is shutting down.~n"), file:close(Fd), ok. handle_info(_Info, Fd) -> {noreply, Fd}. main() -> start_link(), message(hoola), message(blrblrlb), message(wakawaka), stop().