Reputation: 670
I have a MAIN process that spawn an implementation of a gen_fsm behavior, but this MAIN process is not an implementation of supervisor behavior, its just another module. Let say the implementation of gen_fsm is called GAME_ROOM. My case is like this:
The problem is: I need to restore all downed GAME_ROOM states at the new one. My question is: How can I use gen_fsm's terminate function to pass the latest states of the gen_fsm to my MAIN process, so when I respawn a new GAME_ROOM, I can pass that states?
Upvotes: 2
Views: 632
Reputation: 20916
One simple way would be for GAME_ROOM terminate/3
to send a message with the necessary state information to MAIN. For this to work the GAME_ROOM must know the pid of MAIN (easy) and you have to be certain that terminate/3
is really called.
Upvotes: 1
Reputation: 9225
My belief is that if GAME_ROOM exits because of an error, there is nothing to save (how do you know your state is valid, otherwise you would trap the error inside GAME_ROOM).
Upvotes: 0
Reputation: 30995
First of all, I would really suggest you to look at using supervisors in your implementation, to avoid re-inventing the wheel.
A possibility could be to create an ETS table in your MAIN, so you can store data from within your gen_fsms which can survive process crashes.
Upvotes: 0
Reputation: 1830
Read about process_flag ({trap_exit, true}) and handle info 'EXIT'.
Upvotes: 1