Creating a stateful server process (messages with counters)
In this recipe, we will use the same concept used in the first recipe, but we will add a counter for each type of received message. We will introduce states!
Getting ready
To get started, let's create a module named messages_with_state.ex
with the following code:
defmodule MessagesWithState do def start_link do {:ok, spawn_link(fn -> wait_for_messages(0,0,0) end)} end defp wait_for_messages(pings, pongs, unknown) do receive do {"ping", caller} -> send caller, "pong" IO.puts "Received #{pings + 1} ping messages!" wait_for_messages(pings + 1, pongs, unknown) {"pong", caller} -> send caller, "pong" IO.puts "Received #{pongs + 1} pong messages!" wait_for_messages(pings, pongs + 1, unknown) {:status, _caller} -> IO.puts "Current status: #{pings} pings, #{pongs} pongs and #{unknown} unknown messages." {_, caller} -> IO...