Gestion d'événements

a marqué ce sujet comme résolu.

Bonjour,

je viens ici en quête d'idées ! Je souhaite faire un système de gestion d'événement à ma sauce et pour cela j'ai fait pas mal de recherche mais je n'arrive pas à trouver chaussure à mon pied. J'ai une file d'événements (pouvant être événements clavier / souris ou bien autres) et au moment de défiler un événement je ne sais pas de quelle manière propager ce dernier. Je suis plutôt attirer par quelque chose qui reprend le principe des callbacks. Je ne sais pas si c'est le plus optimisé mais je trouve cela plutôt fun. Je ne suis pas très fan des choses du genre :

1
2
3
4
5
6
7
8
class EventHandler
{
public:

    virtual void on_event(Event);
    virtual void on_event_toto(Event);
    virtual void on_event_titi(Event);
};

J'avais il y a quelques années fait un truc de ce genre..

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
class EventHandler
{
public:

    void dequeue_event();

    template<class T>
    void subscribe(void(T::*callback)(EventSender*, Event), T *caller, Event::EventType listenedEvent)    
    {
        std::function<void(EventSender*, Event)> callbackfunction = std::bind(callback, caller, std::placeholders::_1, std::placeholders::_2);
        auto pairCallback = std::pair<EventSender*, std::function<void(EventSender*, Event)>>(caller, callbackfunction);
        this->_map_poll_event.insert(std::pair<Event::EventType, std::pair<EventSender*, std::function<void(EventSender*, Event)>>>(listenedEvent, pairCallback));
    }

private:

    std::multimap<Event::EventType, std::pair<EventSender*, std::function<void(EventSender*, Event)>>> _map_poll_event;
};

mais bon, depuis que j'ai revu ce code je n'arrive pas à penser autrement. Voilà pourquoi je requiers vos conseils ! L'idée est d'avoir quelque d'assez performant et de ne pas perdre son temps à transmettre les événements à toute la planète, uniquement à ceux qui sont concernés avec en plus un ordre de priorité. Si un événement est consommé par quelque chose de plus prioritaire et que cette chose ne souhaite pas que celui-ci soit propagé alors on s'arrête la.

Je ne cherche pas des solutions clefs en main (l'idée est de mettre les mains dans le cambouis) ou que celles-ci me tombent dans le bec mais plutôt vos retours d’expérience dans ce genre de cas.

Merci à vous !

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte