summaryrefslogtreecommitdiff
path: root/erlang/doctor.erl
blob: 9f69429777520766d4658b83d2d7891bec4fdb27 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-module(doctor).
-export([loop/0]).

loop() ->
	process_flag(trap_exit, true),
	receive
		die -> exit(doctor);
		{monitorize, Process} ->
			io:format("Doctor: monitoring ~p.~n", [Process]),
			link(Process);
		new_mon ->
			io:format("Doctor: starting new monitor.~n"),
			register(mon, spawn_link(monitor_doctor, loop, [])),
			mon ! {mon, self()};
		new_rev ->
			io:format("Doctor: starting new revolver.~n"),
			register(revolver, spawn_link(roulette, loop, []));
		{'EXIT', _, mon} ->
			io:format("Doctor: oh SWEET JESUS CHRIST, my monitor just DIED!~n"),
			self() ! new_mon;
		{'EXIT', _, revolver} ->
			io:format("Doctor: The shooter died, restarting...~n"),
			self() ! new_rev
	end,
	loop().