You can always have a more complex state in MyHandler:
defmodule MyHandler do
use GenEvent
def handle_event({:message, id, message}, {id, messages}) do
IO.puts "[ID: #{inspect id}] Message value is #{inspect message}."
{:ok, {id, [message | messages]}}
end
def handle_event(_, state) do
{:ok, state}
end
end
id, :
{:message, id, message}
, . , .
, id, - :
{:ok, manager} = GenEvent.start_link
MyServer.start_link manager
GenEvent.add_handler manager, MyHandler, {id, []}
, {id :: atom, messages :: list} .
:
GenServer.sync_notify manager, {:message, id, message}
:
:
iex(1)> {:ok, manager} = GenEvent.start_link
{:ok,
:
iex(2)> GenEvent.add_handler manager, MyHandler, {:id0, []}
:ok
:id0 :
iex(3)> GenEvent.sync_notify manager, {:message, :id0, "Hello"}
[ID: :id0] Message value is "Hello".
:ok
:id1 :
iex(4)> GenEvent.sync_notify manager, {:message, :id1, "Hello"}
:ok
. , :)
P.S: , map:
%{id: id, messages: []}