4ipideil - 2014-12-18

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