/** \file msg_listen.h Plugin message listening helper class. */
#include <functional>
#include <memory>
#include <wx/event.h>
#include "ocpn_plugin.h"
/**
* Helper class for setting up message listening in plugins.
* Example usage:
* MsgListener<NMEA0183Id> listener
* ...
* auto action = [&] (ObservedEvt ev) {
* auto payload = GetN0183Payload(NMEA0183Id("GGA"), ev);
* ...
* };
* listener.Init(NMEA0183Id("GGA"), action);
*/
template(typename T)
class MsgListener : public wxEvtHandler {
public:
MsgListener() = default;
void Init(T id,
std::function<void(ObservedEvt& ev)> action) {
const wxEventTypeTag<ObservedEvt> EvtObs(wxNewEventType());
m_listener = GetListener(id, EvtObs, this);
Bind(EvtObs, action);
}
private:
std::shared_ptr<ObservableListener> m_listener;
};