File indexing completed on 2024-12-29 05:28:04

0001 <?php
0002 /**
0003  * Zend Framework
0004  *
0005  * LICENSE
0006  *
0007  * This source file is subject to the new BSD license that is bundled
0008  * with this package in the file LICENSE.txt.
0009  * It is also available through the world-wide-web at this URL:
0010  * http://framework.zend.com/license/new-bsd
0011  * If you did not receive a copy of the license and are unable to
0012  * obtain it through the world-wide-web, please send an email
0013  * to license@zend.com so we can send you a copy immediately.
0014  *
0015  * @category   Zend
0016  * @package    Zend_Service_WindowsAzure
0017  * @subpackage RetryPolicy
0018  * @version    $Id$
0019  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0020  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0021  */
0022 
0023 /**
0024  * @see Zend_Service_WindowsAzure_RetryPolicy_RetryPolicyAbstract
0025  */
0026 // require_once 'Zend/Service/WindowsAzure/RetryPolicy/RetryPolicyAbstract.php';
0027 
0028 /**
0029  * @category   Zend
0030  * @package    Zend_Service_WindowsAzure
0031  * @subpackage RetryPolicy
0032  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0033  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0034  */
0035 class Zend_Service_WindowsAzure_RetryPolicy_RetryN extends Zend_Service_WindowsAzure_RetryPolicy_RetryPolicyAbstract
0036 {
0037     /**
0038      * Number of retries
0039      * 
0040      * @var int
0041      */
0042     protected $_retryCount = 1;
0043     
0044     /**
0045      * Interval between retries (in milliseconds)
0046      * 
0047      * @var int
0048      */
0049     protected $_retryInterval = 0;
0050     
0051     /**
0052      * Constructor
0053      * 
0054      * @param int $count                    Number of retries
0055      * @param int $intervalBetweenRetries   Interval between retries (in milliseconds)
0056      */
0057     public function __construct($count = 1, $intervalBetweenRetries = 0)
0058     {
0059         $this->_retryCount = $count;
0060         $this->_retryInterval = $intervalBetweenRetries;
0061     }
0062     
0063     /**
0064      * Execute function under retry policy
0065      * 
0066      * @param string|array $function       Function to execute
0067      * @param array        $parameters     Parameters for function call
0068      * @return mixed
0069      */
0070     public function execute($function, $parameters = array())
0071     {
0072         $returnValue = null;
0073         
0074         for ($retriesLeft = $this->_retryCount; $retriesLeft >= 0; --$retriesLeft) {
0075             try {
0076                 $returnValue = call_user_func_array($function, $parameters);
0077                 return $returnValue;
0078             } catch (Exception $ex) {
0079                 if ($retriesLeft == 1) {
0080                     // require_once 'Zend/Service/WindowsAzure/RetryPolicy/Exception.php';
0081                     throw new Zend_Service_WindowsAzure_RetryPolicy_Exception("Exceeded retry count of " . $this->_retryCount . ". " . $ex->getMessage());
0082                 }
0083                     
0084                 usleep($this->_retryInterval * 1000);
0085             }
0086         }
0087     }
0088 }