GenEvent.Behaviour

This module is a convenience for defining GenEvent callbacks in Elixir.

GenEvent is an OTP behaviour that encapsulates event handling functionality.

Example

Below is an example of a GenEvent that stores notifications until they are fetched:

defmodule MyEventHandler do
  use GenEvent.Behaviour

  # Callbacks

  def init(_) do
    { :ok, [] }
  end

  def handle_event({:notification, x}, notifications) do
    { :ok, [x|notifications] }
  end

  def handle_call(:notifications, notifications) do
    {:ok, Enum.reverse(notifications), []}
  end
end

{ :ok, pid } = :gen_event.start_link
#=> {:ok,#PID<0.42.0>}

:gen_event.add_handler(pid, MyEventHandler, [])
#=> :ok

:gen_event.notify(pid, {:notification, 1})
#=> :ok

:gen_event.notify(pid, {:notification, 2})
#=> :ok

:gen_event.call(pid, MyEventHandler, :notifications)
#=> [1, 2]

:gen_event.call(pid, MyEventHandler, :notifications)
#=> []

Notice we never call the server callbacks directly, they are called by OTP whenever we interact with the server.

Starting and sending messages to the GenEvent is done via Erlang's :gen_event module. For more information, please refer to the following:

Source