Re: [Boost-users] [MSM] Use events twice

I'm using MSM to implement a client for a simple network application. Basically, the server sends messages and the client changes state and responds to them as appropriate.
One of these messages is THROW. THROW gets two arguments: an identifier (0-3) and a value. My client is supposed to sum up the values for consecutive THROW events with the same identifier, and on a change of identifier, store the sum somewhere and start over for the new identifier.
So I have three states (id0, id1, id2 - there's some special handling, which is why they're separate states) and an event Throw(id, value). The transitions for idN are: Throw(my id, value) -> no switch, state.sum += value Throw(other id, value) -> switch to state of other id, reprocess event, storing the sum is handled by the exit action
In other words, I want the next state to immediately handle the event as well, because there's a value there I need to store. The question is, how do I do this?
Here's a sequence of events and actions that could occur: E1: [init] Throw(0, 4) -> [id0: ?] Entry [id0: ?] -> [id0: 0] [id0: 0] reprocess E1 -> [id0: 4] E2: [id0: 4] Throw(0, 8) -> [id0: 12] E3: [id0: 12] Throw(1, 7) -> [id1: ?] Exit [id0: 12] -> save 12 Entry [id1: ?] -> [id1: 0] [id1: 0] reprocess E3 -> [id1: 7]
Hi Sebastian,
Let's see if I get it. Reprocessing is not going to be the problem, I
suppose. An action reprocessing an event untouched would be:
struct reprocess
{
template

On 09.04.2011 16:56, Christophe Henry wrote:
I attach an example. Please tell me if that's what you're looking for.
Hi Christophe, I solved my problem by simply calling fsm.process_event(e) from the right entry_action functions, but your method looks more elegant. Sebastian
participants (2)
-
Christophe Henry
-
Sebastian Redl