erlang gen_fsm编程框架
来源:互联网 发布:java 英文日期转换 编辑:程序博客网 时间:2024/06/06 14:21
本文是erlang中的gen_fsm编程框架,在我们使用这个模型的时候,如果在这些代码的基础上进行开发的话,会收到事半功倍的效果。
%%%-------------------------------------------------------------------
%%% File : eb_atm.erl
%%% Author : Mitchell Hashimoto
%%% Description : The ATM backend for ErlyBank
%%%
%%% Created : 6 Sep 2008 by Mitchell Hashimoto
%%%-------------------------------------------------------------------
-module(eb_atm).
-behaviour(gen_fsm).
%% API
-export([start_link/0]).
%% gen_fsm callbacks
-export([init/1, state_name/2, state_name/3, handle_event/3,
handle_sync_event/4, handle_info/3, terminate/3, code_change/4]).
-define(SERVER, ?MODULE).
%%====================================================================
%% API
%%====================================================================
%%--------------------------------------------------------------------
%% Function: start_link() -> ok,Pid} | ignore | {error,Error}
%% Description:Creates a gen_fsm process which calls Module:init/1 to
%% initialize. To ensure a synchronized start-up procedure, this function
%% does not return until Module:init/1 has returned.
%%--------------------------------------------------------------------
start_link() ->
gen_fsm:start_link({local, ?SERVER}, ?MODULE, [], []).
%%====================================================================
%% gen_fsm callbacks
%%====================================================================
%%--------------------------------------------------------------------
%% Function: init(Args) -> {ok, StateName, State} |
%% {ok, StateName, State, Timeout} |
%% ignore |
%% {stop, StopReason}
%% Description:Whenever a gen_fsm is started using gen_fsm:start/[3,4] or
%% gen_fsm:start_link/3,4, this function is called by the new process to
%% initialize.
%%--------------------------------------------------------------------
init([]) ->
{ok, state_name, nobody}.
%%--------------------------------------------------------------------
%% Function:
%% state_name(Event, State) -> {next_state, NextStateName, NextState}|
%% {next_state, NextStateName,
%% NextState, Timeout} |
%% {stop, Reason, NewState}
%% Description:There should be one instance of this function for each possible
%% state name. Whenever a gen_fsm receives an event sent using
%% gen_fsm:send_event/2, the instance of this function with the same name as
%% the current state name StateName is called to handle the event. It is also
%% called if a timeout occurs.
%%--------------------------------------------------------------------
state_name(_Event, State) ->
{next_state, state_name, State}.
%%--------------------------------------------------------------------
%% Function:
%% state_name(Event, From, State) -> {next_state, NextStateName, NextState} |
%% {next_state, NextStateName,
%% NextState, Timeout} |
%% {reply, Reply, NextStateName, NextState}|
%% {reply, Reply, NextStateName,
%% NextState, Timeout} |
%% {stop, Reason, NewState}|
%% {stop, Reason, Reply, NewState}
%% Description: There should be one instance of this function for each
%% possible state name. Whenever a gen_fsm receives an event sent using
%% gen_fsm:sync_send_event/2,3, the instance of this function with the same
%% name as the current state name StateName is called to handle the event.
%%--------------------------------------------------------------------
state_name(_Event, _From, State) ->
Reply = ok,
{reply, Reply, state_name, State}.
%%--------------------------------------------------------------------
%% Function:
%% handle_event(Event, StateName, State) -> {next_state, NextStateName,
%% NextState} |
%% {next_state, NextStateName,
%% NextState, Timeout} |
%% {stop, Reason, NewState}
%% Description: Whenever a gen_fsm receives an event sent using
%% gen_fsm:send_all_state_event/2, this function is called to handle
%% the event.
%%--------------------------------------------------------------------
handle_event(_Event, StateName, State) ->
{next_state, StateName, State}.
%%--------------------------------------------------------------------
%% Function:
%% handle_sync_event(Event, From, StateName,
%% State) -> {next_state, NextStateName, NextState} |
%% {next_state, NextStateName, NextState,
%% Timeout} |
%% {reply, Reply, NextStateName, NextState}|
%% {reply, Reply, NextStateName, NextState,
%% Timeout} |
%% {stop, Reason, NewState} |
%% {stop, Reason, Reply, NewState}
%% Description: Whenever a gen_fsm receives an event sent using
%% gen_fsm:sync_send_all_state_event/2,3, this function is called to handle
%% the event.
%%--------------------------------------------------------------------
handle_sync_event(Event, From, StateName, State) ->
Reply = ok,
{reply, Reply, StateName, State}.
%%--------------------------------------------------------------------
%% Function:
%% handle_info(Info,StateName,State)-> {next_state, NextStateName, NextState}|
%% {next_state, NextStateName, NextState,
%% Timeout} |
%% {stop, Reason, NewState}
%% Description: This function is called by a gen_fsm when it receives any
%% other message than a synchronous or asynchronous event
%% (or a system message).
%%--------------------------------------------------------------------
handle_info(_Info, StateName, State) ->
{next_state, StateName, State}.
%%--------------------------------------------------------------------
%% Function: terminate(Reason, StateName, State) -> void()
%% Description:This function is called by a gen_fsm when it is about
%% to terminate. It should be the opposite of Module:init/1 and do any
%% necessary cleaning up. When it returns, the gen_fsm terminates with
%% Reason. The return value is ignored.
%%--------------------------------------------------------------------
terminate(_Reason, _StateName, _State) ->
ok.
%%--------------------------------------------------------------------
%% Function:
%% code_change(OldVsn, StateName, State, Extra) -> {ok, StateName, NewState}
%% Description: Convert process state when code is changed
%%--------------------------------------------------------------------
code_change(_OldVsn, StateName, State, _Extra) ->
{ok, StateName, State}.
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
0
上一篇:从5900到65535之间随机分配一个数字——erlang实现
下一篇:毕业三年,同学基本都辞职了,大部分人看完很有同感~
相关热门文章
- python 自动化测试平台 Robot ...
- python 自动化测试平台 Robot ...
- python snmp 自动化2-在python...
- 自动化测试详细测试计划 模板...
- python snmp 自动化3-修改pyth...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- erlang gen_fsm编程框架
- erlang gen_fsm
- erlang gen_fsm(有限状态机)
- erlang gen_fsm模板
- erlang gen_fsm源码分析
- erlang OTP gen_fsm 图解分析
- erlang OTP gen_fsm 图解分析
- Erlang学习:有限状态机(gen_fsm behaviour)
- erlang四大behaviour之二-gen_fsm
- Erlang学习: EUnit Testing for gen_fsm
- erlang四大behaviour之二-gen_fsm
- erlang中gen_server/gen_fsm使用hibernate
- erlang四大behaviour之二-gen_fsm
- erlang四大behaviour之二-gen_fsm(转载)
- erlang四大behaviour之二-gen_fsm(转载)
- erlang简易聊天室基于OTP(gen_server,gen_fsm)
- gen_fsm demo
- gen_fsm例子
- 云计算项目中遇到erlang的几个小问题
- C++ MFC string转Cstring详解
- erlang源程序文件的注释
- 从5900到65535之间随机分配一个数字——erlang实现
- C++ 无条件转移控制
- erlang gen_fsm编程框架
- 关于angular-cli build后文件路径错误
- 毕业三年,同学基本都辞职了,大部分人看完很有同感~
- 使用gen_fsm分配一个5900到65535之间不重复的数字
- linux释放内存缓冲
- Windows下Caffe框架的测试笔记
- android 调用自带的图库查看图片
- ssh的一个小问题解决
- Mybatis的配置文件的配置信息
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
井底之蛙故事内容
井底之蛙的道理
井底之蛙的寓意
井底之蛙告诉我们什么道理
井底之蛙的故事
井底之蛙后续
井底之蛙告诉小朋友什么道理
王语嫣与鸠摩智在井底
井底村
井底村旅游景点
山西井底村
井底村在哪
山西井底村自驾游攻略
井底村三姊妹
井底村和郭亮村哪个更值得去
井底之蛙的意思
井底之蛙新传
井底之蛙出自
井底之蛙什么意思
寓言故事井底之蛙
井底之蛙是什么故事
井底之蛙童话
寓言故事井底之蛙40字
井式炉价格
井式炉生产厂家
小型井式炉
燃气井式炉
井式电阻炉
测径仪价格
井星文
井木犴
小井
井博然
井栏壶图片
半月壶
贵妃壶
唐羽壶
孟臣壶
笑樱壶
石瓢壶的来历
朱泥壶