Skip to content

Instantly share code, notes, and snippets.

@ryuta-ito
Created September 29, 2016 11:54
Show Gist options
  • Save ryuta-ito/2ccabc6579f80d3deb6255a7ed4871f2 to your computer and use it in GitHub Desktop.
Save ryuta-ito/2ccabc6579f80d3deb6255a7ed4871f2 to your computer and use it in GitHub Desktop.
defmodule Ticker do
@interval 2000
@name :ticker
def start do
pid = spawn __MODULE__, :generator, [[]]
:global.register_name(@name, pid)
end
def register(client_pid) do
send :global.whereis_name(@name), {:register, client_pid}
end
def generator(client_pids) do
receive do
{ :register, client_pid} ->
IO.puts "register cliend #{inspect client_pid}"
generator [client_pid | client_pids]
after
@interval ->
client_pids
|> Enum.each(fn client_pid ->
send client_pid, {:tick}
end)
generator(client_pids)
end
end
end
defmodule Client do
def start do
pid = spawn __MODULE__, :receiver, []
Ticker.register pid
end
def receiver do
receive do
{:tick} ->
IO.puts "rec tick!"
receiver
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment