-module(ping_distrib).
-compile(export_all).

ping(Node) ->
% запускаем процесс на другом узле
    Pid = spawn(Node, fun pong/0),
    Pid ! {ping, self()},
    ping_loop(Pid).

ping_loop(Pid) ->
    receive
        {pong, Pid} ->
            io:format("received pong~n"),
            timer:sleep(random:uniform(1200)),
            Pid ! {ping, self()},
            ping_loop(Pid) % ждем...
        after 1000 ->
            io:format("pong timed out~n")
    end.

% входная точка процесса pong
pong() ->
    receive
        {ping, Pid} ->
            io:format("received ping~n"),
            timer:sleep(random:uniform(1200)),
            Pid ! {pong, self()},
            pong() % цикл
    after 1000 ->
        io:format("ping timed out~n")
    end.