don't propagate broadcasts
This commit is contained in:
@@ -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];
|
||||
|
||||
@@ -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 ¶ms )
|
||||
{
|
||||
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
|
||||
|
||||
@@ -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 ¶ms );
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user