File tree Expand file tree Collapse file tree 1 file changed +47
-0
lines changed
Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change 1+ defmodule Ticker do
2+ @ interval 2000
3+ @ name :ticker
4+
5+ def start do
6+ pid = spawn ( __MODULE__ , :generator , [ [ ] ] )
7+ :global . register_name ( @ name , pid )
8+ end
9+
10+ def register ( client_pid ) do
11+ send :global . whereis_name ( @ name ) , { :register , client_pid }
12+ end
13+
14+ def generator ( clients ) do
15+ receive do
16+ { :register , pid } ->
17+ IO . puts "registering: #{ IO . inspect ( pid ) } "
18+ generator ( [ pid | clients ] )
19+ after
20+ @ interval ->
21+ case clients do
22+ [ ] ->
23+ generator ( clients )
24+
25+ [ client | rest_of_clients ] ->
26+ IO . puts "tick to: #{ IO . inspect ( clients ) } "
27+ send client , { :tick }
28+ generator ( :lists . append ( rest_of_clients , [ client ] ) )
29+ end
30+ end
31+ end
32+ end
33+
34+ defmodule Client do
35+ def start do
36+ pid = spawn ( __MODULE__ , :receiver , [ ] )
37+ Ticker . register ( pid )
38+ end
39+
40+ def receiver do
41+ receive do
42+ { :tick } ->
43+ IO . puts "tock in client"
44+ receiver ( )
45+ end
46+ end
47+ end
You can’t perform that action at this time.
0 commit comments