Files
fc/server/server/template/gf2.erl
T
2026-05-23 22:10:14 +08:00

88 lines
2.1 KiB
Erlang

%%----------------------------------------------------
%% {{desc}}
%%
%% @author {{author}}
%%----------------------------------------------------
-module({{mod}}).
-behaviour(gen_fsm).
-export(
[
info/2
,cast/2
,call/2
,start_link/1
]
).
-export([init/1, handle_event/3, handle_sync_event/4, handle_info/3, terminate/3, code_change/4]).
-export([idle/2]).
-record(state, {
ts = 0
,timeout = 0
,switch = open
}).
-include("common.hrl").
-include("role.hrl").
%% @doc INFO信息请求
info(Pid, Info) ->
Pid ! Info.
%% @doc cast异步请求
cast(Pid, Event) ->
gen_fsm:send_all_state_event(Pid, Event).
%% @doc call同步请求
call(Pid, Event) ->
?GFCALL(Pid, Event).
start_link(D)->
gen_fsm:start_link(?MODULE, [D], []).
init([D])->
?INFO("开始启动"),
process_flag(trap_exit, true),
IdelTimeout = 86400000,
State = #state{ts = date:now(), timeout = IdelTimeout},
?INFO("启动完成"),
{ok, idle, State, IdelTimeout}.
handle_event(_Event, StateName, State) ->
continue(StateName, State).
handle_sync_event(_Event, _From, StateName, State) ->
Reply = ok,
continue(StateName, Reply, State).
%% 开始控制
handle_info({switch, S}, StateName, State) when S =:= open orelse S =:= close ->
continue(StateName, State#state{switch = S});
handle_info(_Info, StateName, State) ->
continue(StateName, State).
terminate(_Reason, _StateName, _State) ->
?INFO("开始关闭"),
?INFO("关闭完成"),
ok.
code_change(_OldVsn, StateName, State, _Extra) ->
{ok, StateName, State}.
%%--------------------------------------------
%% 状态变化
%%--------------------------------------------
%% 继续下一个状态
continue(StateName, State = #state{ts = Ts, timeout = Timeout}) ->
{next_state, StateName, State, date:time_left(Timeout, Ts)}.
continue(StateName, Reply, State = #state{ts = Ts, timeout = Timeout}) ->
{reply, Reply, StateName, State, date:time_left(Timeout, Ts)}.
%% 空闲
idle(timeout, State) ->
continue(idle, State#state{ts = date:now()});
idle(_Any, State) ->
continue(idle, State).