C++ EventListener (C# style) Wiki
Brought to you by:
chipideil
Welcome to your wiki!
This is the default page, edit it as you see fit. To add a new page simply reference it within brackets, e.g.: [SamplePage].
The wiki uses Markdown syntax.
Basic Intarface
EventListener.h - contain abstract event class that uses to create custom events
EventHolder.h - contain container, that can be used for specific event
using namespace cevent;
EventHolder<customeventlistener> holder;
holder += new CustomEventListener(...); // subscribe event with ...
holder -= new CustomEventListener(...); // unsubscribe event with ...
holder--; // unsubscribe all events
EventController::GetInst().GenerateEvent<customeventlistener>(...); // generate event: CustomEvent</customeventlistener></customeventlistener>
Event Type Creation
#include "EventListener.h"
NEW_EVENT_MAKER(EventStartLoadListener);
NEW_EVENT_MAKER(EventCompleteLoadListener);
NEW_EVENT_MAKER(EventPutSwordListener);
NEW_EVENT_MAKER(EventHitByEnemyListener);
...
Event Holder Creation
EventHolder<eventstartloadlistener> loadStartEventsHolder;
EventHolder<eventcompleteloadlistener> LoadCompleteEventsHolder;
EventHolder<eventhitbyenemylistener> HitByEnemyEventsHolder;
...</eventhitbyenemylistener></eventcompleteloadlistener></eventstartloadlistener>
Subscribe Events
//Subscribe to the StartLoad event for pForm with pForm->Delegate() delegate:
loadStartEventsHolder += new EventStartLoadListener(pForm, &Form::Delegate, pForm);
//Re-Subscribe to the pForm and change delegate to pSample->SDelegate() //delegate:
loadStartEventsHolder += new EventStartLoadListener(pSample, &Sample::SDelegate, pForm);
//Subscribe to the StartLoad event for pForm2 with pSample->SDelegate() //delegate:
loadStartEventsHolder += new EventStartLoadListener(pSample, &Sample::SDelegate, pForm2);
/*Move delegate for pForm to the end of the EventsChain, (but there is only one StartLoad event for pForm in EventController, so it dosent change anything)*/
loadStartEventsHolder += new EventStartLoadListener(pSample, &Sample::SDelegate, pForm);
//UnSubscribe from pForm StartLoad Event
loadStartEventsHolder -= new EventStartLoadListener(dontcare, &DontCareDelegate, pForm);
//UnSubscribe from all StartLoad Events (in this case unSubscribe from pForm2)
loadStartEventsHolder--;
Events Life Cycle
EventHolder<eventlistener> someHolder; //- can be used only as local object and //automatically removed, when class will be disposed (as any local objects)</eventlistener>
//event that was subscribed manually
EventListener* someEvent = new EventSayMeowListener(sample, &Sample::delegateLoad, pForm);
//Need to dispose it manually
delete someEvent;
//You can UnSubscribe any events inside delegate (as it is in C#)
Events Chain
bool delegateComliteLoad(void obj, const EventArgs args) {
return false;
}
//If function return true, then next event in EventsChain will not be called
Generate Events
//Make custom EventArgs
class CustomEventArgs : public EventArgs {
public:
CustomEventArgs(string& str) : str(custom_var)
string custom_var;
}
//Calling CompleteLoad EventChain where sender == pForm :
EventController::GetInst().GenerateEvent<eventcompleteloadlistener>(pForm, new CustomEventArgs("some parameter"));</eventcompleteloadlistener>
Last edit: 4ipideil 2014-12-19