-module(res_prc).
-behaviour(gen_fsm).
-export([create/1]).
-export([init/1, recv_prc/2]).
-export([send_evt/2]).
-record
(
obj_data,
{
link = 0,
data = []
}
).
%% 初始化锁
create( Data ) ->
gen_fsm:start_link( res_prc, #obj_data{data=Data}, [] ).
init( ObjData ) ->
io:format( "init Pid :~p~n", [self()] ),
{ ok, state_unlink, ObjData }.
%% 获得数据
get() ->
gen_fsm:send_event( self(), {cmd_get, self()} ).
%% 设置数据
set( Data ) ->
gen_fsm:send_event( self(), {cmd_set, self(), Data} ).
%% 链接
link() ->
gen_fsm:send_event( self(), {cmd_link, self()} ).
%% 解链
unlink() ->
gen_fsm:send_event( self(), {cmd_unlink, self()} ).
% 无链接状态 %
state_unlink( Cmd, ObjData ) ->
case Cmd of
{cmd_get, Pid} ->
Pid!ObjData#obj_data.data,
{ next_state, state_unlink, ObjData };
{cmd_link, Pid} ->
Pid!{ ok, self() },
{ next_state, state_link, #obj_data{link=Pid, data=ObjData#obj_data.data} };
Default ->
{ next_state, state_unlink, ObjData }
end.
% 链接状态 %
state_link( Cmd, ObjData ) ->
case Cmd of
{cmd_get, Pid} ->
Pid!ObjData#obj_data.data,
{ next_state, state_link, ObjData };
{cmd_set, ObjData#obj_data.link, Data} ->
{ next_state, state_link, #obj_data{link=ObjData#obj_data.data, data=Data} };
{cmd_unlink, ObjData#obj_data.link} ->
{ next_state, state_unlink, #obj_data{link=0, data=ObjData#obj_data.data} };
Default ->
{ next_state, state_link, ObjData }
end.
新大陆计划
最新推荐文章于 2025-04-22 14:01:50 发布