From: <cpr...@us...> - 2003-03-23 18:34:31
|
Update of /cvsroot/jungerl/jungerl/lib/ce/src In directory sc8-pr-cvs1:/tmp/cvs-serv19300/src Modified Files: ce_goat.erl ce_goat_demo.erl Log Message: Made ce_goat deactivation non-explicit. Index: ce_goat.erl =================================================================== RCS file: /cvsroot/jungerl/jungerl/lib/ce/src/ce_goat.erl,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- ce_goat.erl 23 Mar 2003 17:06:49 -0000 1.3 +++ ce_goat.erl 23 Mar 2003 18:34:28 -0000 1.4 @@ -37,7 +37,7 @@ %% %% <p>A <code>goat</code> represents a middleground between a (dynamic) server %% and a (static) data structure. Code that accesses a <code>goat</code> doesn't need -%% to know or care whether the goat is dynamic or static, and indeed any +%% to know or care whether the <code>goat</code> is dynamic or static, and indeed any %% given goat may switch from one state to the other throughout its lifetime.</p> %% %% <p>The intent of this module is to allow for an (experimental) coding style @@ -54,9 +54,11 @@ %% sent (synchronous) calls and (asynchronous) casts. When a <code>goat</code> %% is active, it will be assigned a process which will react to these requests. %% When it is not active, it will react to calls, but it will become active -%% before reacting to any casts. It can also deactivate itself after a -%% timeout. It, and anything that accesses it, is otherwise oblivious to -%% whether it is active or not.</p> +%% before reacting to any casts. Upon creation, a timeout value can be given. +%% It will automatically deactivate itself after that timeout.</p> +%% +%% <p>The <code>goat</code>, and everything that accesses it, is otherwise +%% oblivious to whether it is active or not.</p> %% %% <p>See also Ulf Wiger's <code>mdisp</code> package.</p> %% @@ -214,10 +216,6 @@ {ok, Reply, NewState} -> NewGoat = Goat#goat{ state = NewState }, ets:insert(?MODULE, NewGoat), - {ok, Reply}; - {deactivate, Reply, NewState} -> - NewGoat = Goat#goat{ state = NewState }, - ets:insert(?MODULE, NewGoat), {ok, Reply} end. @@ -247,24 +245,17 @@ case Handler:handle_call(GoatId, Message, State) of {ok, Reply, NewState} -> Parent ! {{self(), call, Ref}, Reply}, - goat_handler(Handler, GoatId, NewState, Timeout); - {deactivate, Reply, NewState} -> - Parent ! {{self(), call, Ref}, Reply}, - leave_goat_handler(GoatId, NewState) + goat_handler(Handler, GoatId, NewState, Timeout) end; {{Parent, cast}, Message} -> case Handler:handle_cast(GoatId, Message, State) of {ok, NewState} -> - goat_handler(Handler, GoatId, NewState, Timeout); - {deactivate, NewState} -> - leave_goat_handler(GoatId, NewState) + goat_handler(Handler, GoatId, NewState, Timeout) end after Timeout -> - leave_goat_handler(GoatId, State) + Goat = retrieve(GoatId), + NewGoat = Goat#goat{ state = State }, + ets:insert(?MODULE, NewGoat) end. -leave_goat_handler(GoatId, State) -> - Goat = retrieve(GoatId), - NewGoat = Goat#goat{ state = State }, - ets:insert(?MODULE, NewGoat). %%% END of ce_goat.erl %%% Index: ce_goat_demo.erl =================================================================== RCS file: /cvsroot/jungerl/jungerl/lib/ce/src/ce_goat_demo.erl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- ce_goat_demo.erl 23 Mar 2003 07:26:08 -0000 1.1 +++ ce_goat_demo.erl 23 Mar 2003 18:34:28 -0000 1.2 @@ -48,7 +48,7 @@ -export([start/0]). %% @spec handle_call(goat_id(), Message::term(), State::term()) -> -%% {ok, Reply, NewState} | {deactivate, Reply, NewState} +%% {ok, Reply, NewState} handle_call(GoatId, Message=inc, State) -> {ok, {got, Message}, State+1}; @@ -56,14 +56,14 @@ {ok, {got, Message}, State-1}. %% @spec handle_cast(goat_id(), Message::term(), State::term()) -> -%% ok | deactivate +%% {ok, NewState} handle_cast(GoatId, Message, State) -> io:fwrite("goat ~p got cast ~p while in state ~p~n", [GoatId, Message, State]), {ok, State}. %% @spec start() -> ok -%% @doc Demo the <code>goat</code> subsystem. +%% @doc Demonstration of the <code>goat</code> subsystem. start() -> ce_goat:start(), |