Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > 282ba76331d32d96ac00e4024a30ac59 > files > 24

erlang-xmlrpc-1.13-2.fc14.x86_64.rpm

-module(robust_bank_client).
-export([deposit/2, withdraw/2, balance/1]).

deposit(Who, X) -> robust_xmlrpc(deposit, [Who, X]).
withdraw(Who, X) -> robust_xmlrpc(withdraw, [Who, X]).
balance(Who) -> robust_xmlrpc(balance, [Who]).

robust_xmlrpc(F, A) ->
    Tag = mk_tag(),
    case call(3020, Tag, F, A) of
	{error, Reason} -> call(3030, Tag, F, A);
	Result -> Result
    end.

mk_tag() ->
    {MegaSecs, Secs, MicroSecs} = erlang:now(),
    lists:concat([atom_to_list(node()),
		  ".", integer_to_list(MegaSecs),
		  ".", integer_to_list(Secs),
		  ".", integer_to_list(MicroSecs)]).

call(Port, Tag, F, A) ->
    case xmlrpc:call("localhost", Port, "/", {call, F, [Tag|A]}, false,
		     10000) of
	{error, Reason} -> {error, Reason};
	{ok, Result} ->
	    xmlrpc:call("localhost", Port, "/", {call, delete_tag, [Tag]}),
	    Result
    end.