Swift_Plugins_ThrottlerPlugin::beforeSendPerformed PHP Method

beforeSendPerformed() public method

Invoked immediately before the Message is sent.
public beforeSendPerformed ( Swift_Events_SendEvent $evt )
$evt Swift_Events_SendEvent
    public function beforeSendPerformed(Swift_Events_SendEvent $evt)
    {
        $time = $this->getTimestamp();
        if (!isset($this->start)) {
            $this->start = $time;
        }
        $duration = $time - $this->start;
        switch ($this->mode) {
            case self::BYTES_PER_MINUTE:
                $sleep = $this->throttleBytesPerMinute($duration);
                break;
            case self::MESSAGES_PER_SECOND:
                $sleep = $this->throttleMessagesPerSecond($duration);
                break;
            case self::MESSAGES_PER_MINUTE:
                $sleep = $this->throttleMessagesPerMinute($duration);
                break;
            default:
                $sleep = 0;
                break;
        }
        if ($sleep > 0) {
            $this->sleep($sleep);
        }
    }

Usage Example

 public function testMessagesPerMinuteThrottling()
 {
     $sleeper = $this->_createSleeper();
     $timer = $this->_createTimer();
     //60/min
     $plugin = new Swift_Plugins_ThrottlerPlugin(60, Swift_Plugins_ThrottlerPlugin::MESSAGES_PER_MINUTE, $sleeper, $timer);
     $timer->shouldReceive('getTimestamp')->once()->andReturn(0);
     $timer->shouldReceive('getTimestamp')->once()->andReturn(0);
     //expected 1 (sleep 1)
     $timer->shouldReceive('getTimestamp')->once()->andReturn(2);
     //expected 2
     $timer->shouldReceive('getTimestamp')->once()->andReturn(2);
     //expected 3 (sleep 1)
     $timer->shouldReceive('getTimestamp')->once()->andReturn(4);
     //expected 4
     $sleeper->shouldReceive('sleep')->twice()->with(1);
     //60 messages per minute
     //1 message per second
     $message = $this->_createMessageWithByteCount(10);
     $evt = $this->_createSendEvent($message);
     for ($i = 0; $i < 5; ++$i) {
         $plugin->beforeSendPerformed($evt);
         $plugin->sendPerformed($evt);
     }
 }
All Usage Examples Of Swift_Plugins_ThrottlerPlugin::beforeSendPerformed