Skip to content

SFME::Mediator

Sztergbaum Roman edited this page Feb 4, 2018 · 66 revisions

Welcome to the page of the SFME::Mediator module

Modules contents

A complete example can be found here

Class Diagram

EventManager

Content for EventManager.

Member function : emit

    template <typename TEvent, typename ... Args>
    void emit(Args &&... args) noexcept;
Template parameters
  • TEvent: The type of event you wish to broadcast.
  • Args: The arguments possibly necessary to the creation of the TEvent object.
Notes
  • TEvent must be a class derived from BaseEvent class.

Who can i use it ?

#include <SFME/mediator/mediator.hpp>

//! User Event with non empty constructor
struct InputEvent : sfme::mediator::BaseEvent
{
    InputEvent(char _keycode) noexcept : keycode(_keycode)
    {
    }

    char keycode;
};

//! User Event default constructible.
struct ShutdownEvent : sfme::mediator::BaseEvent
{
};

int main()
{
    sfme::mediator::EventManager evtMgr;
    evtMgr.emit<InputEvent>('a');
    evtMgr.emit<ShutdownEvent>();
    return 0;
}

Member function : subscribe

    template <typename TEvent, typename TReceiver>
    void subscribe(TReceiver &receiver) noexcept;
Template parameters
  • TEvent: Represents the type of event you want to subscribe.
  • Receiver: Represents the instance of the class that wishes to subscribe to this type of event.
Notes
  • TEvent must be a class derived from BaseEvent class.
  • The instance that uses the subscribe member function must be derived from the Receiver class. The use of the CRTP is here only for readability.

Who can i use it ?

#include <SFME/mediator/mediator.hpp>

struct InputEvent : sfme::mediator::BaseEvent
{
};

class Example : public sfme::mediator::Receiver<Example>
{
public:
    Example(sfme::mediator::EventManager &evtMgr) noexcept
    {
        evtMgr.subscribe<InputEvent>(*this);
    }

    void receive([[maybe_unused]] const InputEvent& evt) noexcept
    {
    }
};

int main() 
{
    sfme::mediator::EventManager evtMgr;
    Example ex(evtMgr);
    return 0;
}

BaseEvent

Content for BaseEvent.

Receiver

Content for Receiver.

Example

Content of the examples.

Clone this wiki locally