% $Id: server1.erl,v 1.1 2013/04/17 00:25:59 leavens Exp leavens $ % Quoted from section 16.1 of Joel Armstrong's book "Programming Erlang" % (Pragmatic Press, 2007). -module(server1). -export([start/2, rpc/2]). start(Name, Mod) -> register(Name, spawn(fun() -> loop(Name, Mod, Mod:init()) end)). rpc(Name, Request) -> Name ! {self(), Request}, receive {Name, Response} -> Response end. loop(Name, Mod, State) -> receive {From, Request} -> {Response, NewState} = Mod:handle(Request, State), From ! {Name, Response}, loop(Name, Mod, NewState) end.