Next, we'll need two utility functions to abstract away some of the GenServer logic. We'll start by creating the function responsible for writing new data to our ETS Presence cache:
def write(topic, username, status) do row = %{ topic: topic, username: username, status: status, timestamp: DateTime.utc_now() } GenServer.cast(__MODULE__, {:write, row}) end
This function isn't doing nearly as much as it looks like it's doing: It takes in the topic, the user's username, and the status we want to record, builds a map from these, which includes the current timestamp, and then uses a GenServer message cast (an asynchronous call) to itself to write that row. We'll deal with this message later!
lookup ...