Commit | Line | Data |
---|---|---|
982ec720 | 1 | -module(life_god). |
d2a0e2f9 SK |
2 | -behaviour(supervisor). |
3 | ||
4 | ||
5 | %% API | |
1aa9333c | 6 | -export([start_link/3]). |
d2a0e2f9 SK |
7 | |
8 | %% Callbacks | |
9 | -export([init/1]). | |
10 | ||
11 | ||
12 | %% Helper macro for declaring children of supervisor | |
13 | -define(CHILD(Type, I, Args), {I, {I, start_link, Args}, permanent, 5000, Type, [I]}). | |
14 | ||
15 | ||
16 | %% ============================================================================ | |
17 | %% API | |
18 | %% ============================================================================ | |
19 | ||
1aa9333c SK |
20 | start_link(X, Y, CellData) -> |
21 | supervisor:start_link({local, ?MODULE}, ?MODULE, [X, Y, CellData]). | |
d2a0e2f9 SK |
22 | |
23 | ||
24 | %% ============================================================================ | |
25 | %% Callbacks | |
26 | %% ============================================================================ | |
27 | ||
1aa9333c | 28 | init([X, Y, CellData]) -> |
d2a0e2f9 | 29 | CellNames = [Name || {_, Name, _} <- CellData], |
00853100 | 30 | RestartStrategy = {one_for_one, 1000000, 1}, |
c8c75648 SK |
31 | |
32 | Observer = ?CHILD(worker, life_observer, [X, Y]), | |
d2a0e2f9 | 33 | Cells = [spec_cell(Datum) || Datum <- CellData], |
1aa9333c | 34 | Time = ?CHILD(worker, life_time, [X, Y, CellNames]), |
c8c75648 SK |
35 | |
36 | Children = [Observer | Cells ++ [Time]], | |
37 | ||
d2a0e2f9 SK |
38 | {ok, {RestartStrategy, Children}}. |
39 | ||
40 | ||
41 | spec_cell({_, Name, _}=Datum) -> | |
982ec720 | 42 | M = life_cell, |
d2a0e2f9 SK |
43 | F = start_link, |
44 | A = [Datum], | |
45 | {Name, {M, F, A}, permanent, 5000, worker, [M]}. |