2010-03-23 16 views
0

Je développe un serveur basé sur le réseau qui peut potentiellement avoir des centaines d'états et d'actions/événements. Jusqu'à présent, j'ai réussi avec de simples instructions de commutation, mais maintenant je ressens le besoin d'une machine d'état que je peux configurer en externe par fichier texte/xml.Génération de classes basées sur des machines d'état boost

Quelle est votre suggestion pour la machine d'état C++ existante qui me permet de configurer des états/événements en externe à partir du fichier?

J'ai regardé la machine d'état boost mais il semble qu'elle n'a pas la capacité de générer les classes à partir du fichier machine d'état et je ne veux pas créer des 100s de classe manuellement?

Quelles sont les autres options?

Répondre

1

Si vous voulez être flexible, vous devriez chercher Qt State Machine http://doc.qt.nokia.com/4.6/statemachine-api.html

+0

La machine d'état QT semble être intéressante mais elle a une licence commerciale. – rjoshi

+0

Ils ont aussi une licence open source. Quoi qu'il en soit, je ne comprends pas pourquoi certaines personnes considèrent la licence commerciale comme un problème. –

1

QP (http://www.state-machine.com) est une autre option qui est, dans mon esprit, le modèle tout à fait conduit le développement amical. J'ai lu récemment une thèse de semestre qui soutient mon opinion: http://security.hsr.ch/mse/projects/2011_Code_Generator_for_UML_State_Machines.pdf

En théorie, vous pouvez également utiliser l'interface frontale boost :: msm eUML qui a une syntaxe très très silencieuse. voici un exemple trivial de boost:

BOOST_MSM_EUML_TRANSITION_TABLE(( 
Playing == Stopped + play [some_guard]/(some_action , start_playback) , 
Open  == Stopped + open_close/ open_drawer       , 
Stopped == Stopped + stop            , 
Empty == Open + open_close/close_drawer       , 
Open  == Empty + open_close/open_drawer       , 
Stopped == Empty + cd_detected [good_disk_format]/store_cd_info 
),transition_table) 

Je ne sais pas comment sérieusement de prendre le statut « expérimental » de eUML, je ne l'ai pas eu de problèmes avec elle jusqu'à présent.