|
|
@ -86,7 +86,6 @@ |
|
|
|
{'logfile', string()}. |
|
|
|
|
|
|
|
-type startOpt() :: |
|
|
|
daemon | |
|
|
|
{'timeout', timeout()} | |
|
|
|
{'debug', [debug_flag()]} | |
|
|
|
{'spawn_opt', [proc_lib:start_spawn_option()]} | |
|
|
@ -210,8 +209,6 @@ init_it(Starter, Parent, ServerRef, _, _, Options) -> |
|
|
|
process_flag(trap_exit, true), |
|
|
|
Name = gen:name(ServerRef), |
|
|
|
Debug = gen:debug_options(Name, Options), |
|
|
|
IsDaemon = lists:member(daemon, Options), |
|
|
|
GbhOpts = #gbhOpts{daemon = IsDaemon}, |
|
|
|
HibernateAfterTimeout = gen:hibernate_after(Options), |
|
|
|
proc_lib:init_ack(Starter, {ok, self()}), |
|
|
|
receiveIng(Parent, Name, HibernateAfterTimeout, #{}, Debug, false). |
|
|
@ -340,65 +337,65 @@ receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, IsHib) -> |
|
|
|
end. |
|
|
|
|
|
|
|
epmCallMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, From, Request) -> |
|
|
|
NewDebug = ?SYS_DEBUG(Debug, ServerName, {call, From, Request}), |
|
|
|
?SYS_DEBUG(Debug, ServerName, {call, From, Request}), |
|
|
|
case Request of |
|
|
|
'$which_handlers' -> |
|
|
|
reply(From, maps:keys(EpmHers)), |
|
|
|
receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, NewDebug, false); |
|
|
|
receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, false); |
|
|
|
{'$addEpm', EpmHandler, Args} -> |
|
|
|
{Reply, NewEpmHers, IsHib} = doAddEpm(EpmHers, EpmHandler, Args, undefined), |
|
|
|
reply(From, Reply), |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib); |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib); |
|
|
|
{'$addSupEpm', EpmHandler, Args, EpmSup} -> |
|
|
|
{Reply, NewEpmHers, IsHib} = doAddSupEpm(EpmHers, EpmHandler, Args, EpmSup), |
|
|
|
reply(From, Reply), |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib); |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib); |
|
|
|
{'$delEpm', EpmHandler, Args} -> |
|
|
|
{Reply, NewEpmHers} = doDelEpm(EpmHers, EpmHandler, Args), |
|
|
|
reply(From, Reply), |
|
|
|
receiveIng(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, false); |
|
|
|
receiveIng(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, false); |
|
|
|
{'$swapEpm', EpmId1, Args1, EpmId2, Args2} -> |
|
|
|
{Reply, NewEpmHers, IsHib} = doSwapEpm(EpmHers, EpmId1, Args1, EpmId2, Args2), |
|
|
|
reply(From, Reply), |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib); |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib); |
|
|
|
{'$swapSupEpm', EpmId1, Args1, EpmId2, Args2, SupPid} -> |
|
|
|
{Reply, NewEpmHers, IsHib} = doSwapSupEpm(EpmHers, EpmId1, Args1, EpmId2, Args2, SupPid), |
|
|
|
reply(From, Reply), |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib); |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib); |
|
|
|
{'$syncNotify', Event} -> |
|
|
|
{NewEpmHers, IsHib} = doNotify(EpmHers, handleEvent, Event, false), |
|
|
|
reply(From, ok), |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib); |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib); |
|
|
|
{'$epmCall', EpmHandler, Query} -> |
|
|
|
case doEpmHandle(EpmHers, EpmHandler, handleCall, Query, From) of |
|
|
|
{NewEpmHers, IsHib} -> |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib); |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib); |
|
|
|
NewEpmHers -> |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, false) |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, false) |
|
|
|
end |
|
|
|
end. |
|
|
|
|
|
|
|
epmInfoMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, CmdOrEmpHandler, Event) -> |
|
|
|
NewDebug = ?SYS_DEBUG(Debug, ServerName, {info, CmdOrEmpHandler, Event}), |
|
|
|
?SYS_DEBUG(Debug, ServerName, {info, CmdOrEmpHandler, Event}), |
|
|
|
case CmdOrEmpHandler of |
|
|
|
'$infoNotify' -> |
|
|
|
{NewEpmHers, IsHib} = doNotify(EpmHers, handleEvent, Event, false), |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib); |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib); |
|
|
|
EpmHandler -> |
|
|
|
case doEpmHandle(EpmHers, EpmHandler, handleInfo, Event, false) of |
|
|
|
{NewEpmHers, IsHib} -> |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib); |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib); |
|
|
|
NewEpmHers -> |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, false) |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, false) |
|
|
|
end |
|
|
|
end. |
|
|
|
|
|
|
|
handleMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, Msg) -> |
|
|
|
NewDebug = ?SYS_DEBUG(Debug, ServerName, {in, Msg}), |
|
|
|
?SYS_DEBUG(Debug, ServerName, {in, Msg}), |
|
|
|
case Msg of |
|
|
|
{'EXIT', From, Reason} -> |
|
|
|
NewEpmHers = epmStopOne(From, EpmHers, Reason), |
|
|
|
receiveIng(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, false); |
|
|
|
receiveIng(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, false); |
|
|
|
{_From, Tag, stop} -> |
|
|
|
try terminate_server(normal, Parent, ServerName, EpmHers) |
|
|
|
after |
|
|
@ -406,13 +403,13 @@ handleMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, Msg) -> |
|
|
|
end; |
|
|
|
{_From, Tag, get_modules} -> |
|
|
|
reply(Tag, get_modules(EpmHers)), |
|
|
|
receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, NewDebug, false); |
|
|
|
receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, false); |
|
|
|
{_From, Tag, which_handlers} -> |
|
|
|
reply(Tag, maps:keys(EpmHers)), |
|
|
|
receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, NewDebug, false); |
|
|
|
receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, false); |
|
|
|
_ -> |
|
|
|
{NewEpmHers, IsHib} = doNotify(EpmHers, handleInfo, Msg, false), |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib) |
|
|
|
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib) |
|
|
|
end. |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
|
|