2014-03-29 31 views
0

我有一个gen_fsm实现,它具有非常多的状态和很多代码(超过2000行代码)。任何想法如何使gen_fsm模块化,也许像插件系统?但我希望fsm能够在位于不同插件的状态之间跳转。模块化gen_fsm行为实现

回答

1

那么你可以创建erlang模块。我在看this gen_fsm skeleton,你可以将任何功能换成它自己的模块。

例如假设你有一个事件处理程序像

handle_event(wakeup, StateName, State) -> 
            %% rest of the body 

你可以创建一个新的模块和移动处理事件有

-module(wakeup_event). 
    -export(wakeup/3). 

    wakeup(_wakeup,Statename, State)-> %%do something here 
             {nextstate, Statename,State}. 

的定义,并从handle_event调用它像这样

handle_event(wakeup,Statename,State)-> 
      wakeup_event:wakeup(wakeup,Statename,State);