don't propagate broadcasts

This commit is contained in:
Glenn Maynard
2007-03-02 06:15:56 +00:00
parent f49cbb703e
commit c0e8327704
3 changed files with 16 additions and 3 deletions
+4
View File
@@ -390,6 +390,10 @@ void ActorFrame::HandleMessage( const Message &msg )
{ {
Actor::HandleMessage( msg ); Actor::HandleMessage( msg );
/* Don't propagate broadcasts. They'll receive it directly if they're subscribed. */
if( msg.IsBroadcast() )
return;
for( unsigned i=0; i<m_SubActors.size(); i++ ) for( unsigned i=0; i<m_SubActors.size(); i++ )
{ {
Actor* pActor = m_SubActors[i]; Actor* pActor = m_SubActors[i];
+7 -2
View File
@@ -91,11 +91,13 @@ Message::Message( const RString &s )
{ {
m_sName = s; m_sName = s;
m_pParams = new LuaTable; m_pParams = new LuaTable;
m_bBroadcast = false;
} }
Message::Message( const RString &s, const LuaReference &params ) Message::Message( const RString &s, const LuaReference &params )
{ {
m_sName = s; m_sName = s;
m_bBroadcast = false;
Lua *L = LUA->Get(); Lua *L = LUA->Get();
m_pParams = new LuaTable; // XXX: creates an extra table m_pParams = new LuaTable; // XXX: creates an extra table
params.PushSelf( L ); params.PushSelf( L );
@@ -187,8 +189,10 @@ void MessageManager::Unsubscribe( IMessageSubscriber* pSubscriber, MessageID m )
Unsubscribe( pSubscriber, MessageIDToString(m) ); Unsubscribe( pSubscriber, MessageIDToString(m) );
} }
void MessageManager::Broadcast( const Message &msg ) const void MessageManager::Broadcast( Message &msg ) const
{ {
msg.SetBroadcast(true);
LockMut(g_Mutex); LockMut(g_Mutex);
map<RString,SubscribersSet>::const_iterator iter = g_MessageToSubscribers.find( msg.GetName() ); map<RString,SubscribersSet>::const_iterator iter = g_MessageToSubscribers.find( msg.GetName() );
@@ -205,7 +209,8 @@ void MessageManager::Broadcast( const Message &msg ) const
void MessageManager::Broadcast( const RString& sMessage ) const void MessageManager::Broadcast( const RString& sMessage ) const
{ {
ASSERT( !sMessage.empty() ); ASSERT( !sMessage.empty() );
Broadcast( Message(sMessage) ); Message msg(sMessage);
Broadcast( msg );
} }
void MessageManager::Broadcast( MessageID m ) const void MessageManager::Broadcast( MessageID m ) const
+5 -1
View File
@@ -88,6 +88,9 @@ struct Message
~Message(); ~Message();
RString GetName() const { return m_sName; } RString GetName() const { return m_sName; }
bool IsBroadcast() const { return m_bBroadcast; }
void SetBroadcast( bool b ) { m_bBroadcast = b; }
void PushParamTable( lua_State *L ); void PushParamTable( lua_State *L );
const LuaReference &GetParamTable() const; const LuaReference &GetParamTable() const;
void SetParamTable( const LuaReference &params ); void SetParamTable( const LuaReference &params );
@@ -120,6 +123,7 @@ struct Message
private: private:
RString m_sName; RString m_sName;
LuaTable *m_pParams; LuaTable *m_pParams;
bool m_bBroadcast;
}; };
class IMessageSubscriber class IMessageSubscriber
@@ -162,7 +166,7 @@ public:
void Subscribe( IMessageSubscriber* pSubscriber, MessageID m ); void Subscribe( IMessageSubscriber* pSubscriber, MessageID m );
void Unsubscribe( IMessageSubscriber* pSubscriber, const RString& sMessage ); void Unsubscribe( IMessageSubscriber* pSubscriber, const RString& sMessage );
void Unsubscribe( IMessageSubscriber* pSubscriber, MessageID m ); void Unsubscribe( IMessageSubscriber* pSubscriber, MessageID m );
void Broadcast( const Message &msg ) const; void Broadcast( Message &msg ) const;
void Broadcast( const RString& sMessage ) const; void Broadcast( const RString& sMessage ) const;
void Broadcast( MessageID m ) const; void Broadcast( MessageID m ) const;