struct CCL::ISignalHandler
Overview
Handler for signal protocol between ISubject and IObserver. More…
#include <isignalhandler.h> struct ISignalHandler: public CCL::IUnknown { // methods virtual tresult CCL_API advise (ISubject* subject, IObserver* observer) = 0; virtual tresult CCL_API unadvise (ISubject* subject, IObserver* observer) = 0; virtual tresult CCL_API performSignal (ISubject* subject, MessageRef msg) = 0; virtual tresult CCL_API queueSignal (ISubject* subject, IMessage* msg) = 0; virtual tresult CCL_API queueChanged (ISubject* subject) = 0; virtual tresult CCL_API cancelSignals (ISubject* subject) = 0; virtual tresult CCL_API postMessage ( IObserver* observer, IMessage* msg, int delay = 0 ) = 0; virtual tresult CCL_API postMessageBlocking (IObserver* observer, IMessage* msg) = 0; virtual tresult CCL_API cancelMessages (IObserver* observer) = 0; virtual tresult CCL_API flush (IObserver* observer = nullptr) = 0; virtual tbool CCL_API hasObservers (ISubject* subject) = 0; virtual tbool CCL_API messagesPending (IObserver* observer) = 0; };
Inherited Members
public: // methods virtual tresult CCL_API queryInterface (UIDRef iid, void** ptr) = 0; virtual unsigned int CCL_API retain () = 0; virtual unsigned int CCL_API release () = 0;
Detailed Documentation
Handler for signal protocol between ISubject and IObserver.
Threading Policy: Everything except queueSignal() and postMessage() must be called from main thread only, otherwise the methods will fail with kResultWrongThread!
Methods
virtual tresult CCL_API advise (ISubject* subject, IObserver* observer) = 0
Establish connection between subject and observer.
virtual tresult CCL_API unadvise (ISubject* subject, IObserver* observer) = 0
Break connection between subject and observer.
virtual tresult CCL_API performSignal (ISubject* subject, MessageRef msg) = 0
This will call IObserver::notify() on all dependent observers of given subject.
virtual tresult CCL_API queueSignal (ISubject* subject, IMessage* msg) = 0
Queue signal message of given subject.
It is performed next time flush() is called. If equal messages are queued for a subject, the signal is performed only once.
virtual tresult CCL_API queueChanged (ISubject* subject) = 0
Optimized version of queueSignal() for kChanged message without arguments.
virtual tresult CCL_API cancelSignals (ISubject* subject) = 0
Discard any queued signal messages of given subject.
virtual tresult CCL_API postMessage ( IObserver* observer, IMessage* msg, int delay = 0 ) = 0
Post message directly to given observer with delay given in milliseconds.
Delayed messages are delivered only once.
virtual tresult CCL_API postMessageBlocking (IObserver* observer, IMessage* msg) = 0
Similar to postMessage(), but calling thread blocks until message is delivered or canceled.
virtual tresult CCL_API cancelMessages (IObserver* observer) = 0
Discard any messages posted to given observer which have not been delivered yet.
virtual tresult CCL_API flush (IObserver* observer = nullptr) = 0
Flush queued signals.
virtual tbool CCL_API hasObservers (ISubject* subject) = 0
Return true, if it still has observers.
virtual tbool CCL_API messagesPending (IObserver* observer) = 0
Return true, if there are undelivered messages for the observer.