Our server implementation lacks a few things. How to stop it gracefully and how to upgrade its code?
Our current implementation (right below the ## Callbacks (Server API)
comment) has three of the six callbacks that form the GenServer base skeleton. The ones missing are handle_info/2
, terminate/2
, and code_change/3
.
We will be implementing all of these functions in this recipe.
Note
The GenServer provides default implementations for all :gen_server
callbacks. This is the reason we can get away without having to define all of them explicitly, like we did in Erlang.
We will follow these steps to implement the functions and make our server a full-blown GenServer:
Implement the
handle_info/2
function:def handle_info(info, state) do IO.puts("Received info message #{inspect(info)}") {:noreply, state} end
Implement the
terminate/2
function:def terminate(reason, state) do IO...