MCPcopy Create free account
hub / github.com/TorqueGameEngines/Torque3D / subscribe

Method subscribe

Engine/source/util/messaging/eventManager.cpp:271–316  ·  view source on GitHub ↗

CodeReview [tom, 2/20/2007] The "listener" argument was an IMessageListener, but it was actually used as a SimObject and never a listener. Thus, it is now a SimObject.

Source from the content-addressed store, hash-verified

269// CodeReview [tom, 2/20/2007] The "listener" argument was an IMessageListener,
270// but it was actually used as a SimObject and never a listener. Thus, it is now a SimObject.
271bool EventManager::subscribe(SimObject *callbackObj, const char* event, const char* callback /*= NULL */)
272{
273 // Make sure the event is valid.
274 if( !isRegisteredEvent( event ) )
275 {
276 Con::warnf( "EventManager::subscribe - %s is not a registered event.", event );
277 return false;
278 }
279
280 // Grab the callback name.
281 char* cb = NULL;
282 if( !callback || !*callback )
283 {
284 // Not specified, use default ( "onEvent" ).
285 S32 length = dStrlen( event ) + 5;
286 cb = new char[length];
287 dSprintf( cb, length, "on%s", event );
288 }
289 else
290 {
291 dsize_t cbLen = dStrlen(callback) + 1;
292 cb = new char[cbLen];
293 dStrcpy(cb, callback, cbLen);
294 }
295
296 // Create the subscriber object.
297 EventManagerListener::Subscriber subscriber;
298 subscriber.listener = callbackObj;
299 subscriber.event = StringTable->insert( event );
300 subscriber.callback = StringTable->insert( cb );
301 subscriber.callDepth = 0;
302 subscriber.removeFlag = false;
303
304 delete [] cb;
305
306 // Grab the subscriber list.
307 Vector<EventManagerListener::Subscriber>* subscribers = mListener.mSubscribers.retreive( event );
308
309 // If the event exists, there should always be a valid subscriber list.
310 AssertFatal( subscribers, "Invalid event subscriber list." );
311
312 // Add the subscriber.
313 subscribers->push_back( subscriber );
314
315 return true;
316}
317
318
319//-----------------------------------------------------------------------------

Callers 2

checkAutoUpdateMethod · 0.80
eventManager.cppFile · 0.80

Calls 7

dSprintfFunction · 0.85
dStrcpyFunction · 0.85
warnfFunction · 0.50
dStrlenFunction · 0.50
insertMethod · 0.45
retreiveMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected