diff options
Diffstat (limited to 'erlang/server.erl')
-rw-r--r-- | erlang/server.erl | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/erlang/server.erl b/erlang/server.erl new file mode 100644 index 0000000..6769b68 --- /dev/null +++ b/erlang/server.erl @@ -0,0 +1,59 @@ +-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(). |