/** * Broadcast a message, it's data, and who sent it. * * @see Container::receiveMessage * * @param string $inMessage * @param mixed $inData * @param Container $sender * * @return void */ public static function broadcastMessage($inMessage, $inData, $sender = null) { if (self::canSendMessage($inMessage)) { self::$sending++; $page = self::$page; if ($sender) { // if the sender is a container and it doesn't yet have a page (constructor) we need to not send the message since thats // the behavior that the old system used. if ($sender instanceof Container) { $page = $sender->getPage(); } } else { $sender = self::$page; } if ($page) { $page->broadcastMessageToTree($inMessage, $inData, $sender); } foreach (self::$page->_mcReceivers as $thisReceiver) { if (!in_array($thisReceiver, self::$toRemove)) { $thisReceiver->messageReceived($inMessage, $inData, $sender); } } self::$sending--; if (self::$sending == 0) { if (count(self::$toRemove)) { foreach (self::$toRemove as $removeThis) { self::$page->mcRemoveReceiver($removeThis); } self::$toRemove = array(); } } } }