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 );
/* 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++ )
{
Actor* pActor = m_SubActors[i];
+7 -2
View File
@@ -91,11 +91,13 @@ Message::Message( const RString &s )
{
m_sName = s;
m_pParams = new LuaTable;
m_bBroadcast = false;
}
Message::Message( const RString &s, const LuaReference &params )
{
m_sName = s;
m_bBroadcast = false;
Lua *L = LUA->Get();
m_pParams = new LuaTable; // XXX: creates an extra table
params.PushSelf( L );
@@ -187,8 +189,10 @@ void MessageManager::Unsubscribe( IMessageSubscriber* pSubscriber, MessageID m )
Unsubscribe( pSubscriber, MessageIDToString(m) );
}
void MessageManager::Broadcast( const Message &msg ) const
void MessageManager::Broadcast( Message &msg ) const
{
msg.SetBroadcast(true);
LockMut(g_Mutex);
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
{
ASSERT( !sMessage.empty() );
Broadcast( Message(sMessage) );
Message msg(sMessage);
Broadcast( msg );
}
void MessageManager::Broadcast( MessageID m ) const
+5 -1
View File
@@ -88,6 +88,9 @@ struct Message
~Message();
RString GetName() const { return m_sName; }
bool IsBroadcast() const { return m_bBroadcast; }
void SetBroadcast( bool b ) { m_bBroadcast = b; }
void PushParamTable( lua_State *L );
const LuaReference &GetParamTable() const;
void SetParamTable( const LuaReference &params );
@@ -120,6 +123,7 @@ struct Message
private:
RString m_sName;
LuaTable *m_pParams;
bool m_bBroadcast;
};
class IMessageSubscriber
@@ -162,7 +166,7 @@ public:
void Subscribe( IMessageSubscriber* pSubscriber, MessageID m );
void Unsubscribe( IMessageSubscriber* pSubscriber, const RString& sMessage );
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( MessageID m ) const;