don't propagate broadcasts
This commit is contained in:
@@ -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];
|
||||||
|
|||||||
@@ -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 ¶ms )
|
Message::Message( const RString &s, const LuaReference ¶ms )
|
||||||
{
|
{
|
||||||
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
|
||||||
|
|||||||
@@ -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 ¶ms );
|
void SetParamTable( const LuaReference ¶ms );
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user