149 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /*
 | |
|  +--------------------------------------------------------------------+
 | |
|  | CiviCRM version 4.7                                                |
 | |
|  +--------------------------------------------------------------------+
 | |
|  | Copyright CiviCRM LLC (c) 2004-2017                                |
 | |
|  +--------------------------------------------------------------------+
 | |
|  | This file is a part of CiviCRM.                                    |
 | |
|  |                                                                    |
 | |
|  | CiviCRM is free software; you can copy, modify, and distribute it  |
 | |
|  | under the terms of the GNU Affero General Public License           |
 | |
|  | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
 | |
|  |                                                                    |
 | |
|  | CiviCRM is distributed in the hope that it will be useful, but     |
 | |
|  | WITHOUT ANY WARRANTY; without even the implied warranty of         |
 | |
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
 | |
|  | See the GNU Affero General Public License for more details.        |
 | |
|  |                                                                    |
 | |
|  | You should have received a copy of the GNU Affero General Public   |
 | |
|  | License and the CiviCRM Licensing Exception along                  |
 | |
|  | with this program; if not, contact CiviCRM LLC                     |
 | |
|  | at info[AT]civicrm[DOT]org. If you have questions about the        |
 | |
|  | GNU Affero General Public License or the licensing of CiviCRM,     |
 | |
|  | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
 | |
|  +--------------------------------------------------------------------+
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * A queue is an object (usually backed by some persistent data store)
 | |
|  * which stores a list of tasks or messages for use by other processes.
 | |
|  *
 | |
|  * This would ideally be an interface, but it's handy to specify the
 | |
|  * "function __construct()" and the "$name" handling
 | |
|  *
 | |
|  * Note: This interface closely parallels the DrupalQueueInterface.
 | |
|  */
 | |
| abstract class CRM_Queue_Queue {
 | |
| 
 | |
|   /**
 | |
|    * @var string
 | |
|    */
 | |
|   private $_name;
 | |
| 
 | |
|   /**
 | |
|    * Create a reference to queue. After constructing the queue, one should
 | |
|    * usually call createQueue (if it's a new queue) or loadQueue (if it's
 | |
|    * known to be an existing queue).
 | |
|    *
 | |
|    * @param array $queueSpec
 | |
|    *   Array with keys:
 | |
|    *   - type: string, required, e.g. "interactive", "immediate", "stomp",
 | |
|    *     "beanstalk"
 | |
|    *   - name: string, required, e.g. "upgrade-tasks"
 | |
|    *   - reset: bool, optional; if a queue is found, then it should be
 | |
|    *     flushed; default to TRUE
 | |
|    *   - (additional keys depending on the queue provider).
 | |
|    */
 | |
|   public function __construct($queueSpec) {
 | |
|     $this->_name = $queueSpec['name'];
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Determine the string name of this queue.
 | |
|    *
 | |
|    * @return string
 | |
|    */
 | |
|   public function getName() {
 | |
|     return $this->_name;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Perform any registation or resource-allocation for a new queue
 | |
|    */
 | |
|   public abstract function createQueue();
 | |
| 
 | |
|   /**
 | |
|    * Perform any loading or pre-fetch for an existing queue.
 | |
|    */
 | |
|   public abstract function loadQueue();
 | |
| 
 | |
|   /**
 | |
|    * Release any resources claimed by the queue (memory, DB rows, etc)
 | |
|    */
 | |
|   public abstract function deleteQueue();
 | |
| 
 | |
|   /**
 | |
|    * Check if the queue exists.
 | |
|    *
 | |
|    * @return bool
 | |
|    */
 | |
|   public abstract function existsQueue();
 | |
| 
 | |
|   /**
 | |
|    * Add a new item to the queue.
 | |
|    *
 | |
|    * @param mixed $data
 | |
|    *   Serializable PHP object or array.
 | |
|    * @param array $options
 | |
|    *   Queue-dependent options; for example, if this is a
 | |
|    *   priority-queue, then $options might specify the item's priority.
 | |
|    */
 | |
|   public abstract function createItem($data, $options = array());
 | |
| 
 | |
|   /**
 | |
|    * Determine number of items remaining in the queue.
 | |
|    *
 | |
|    * @return int
 | |
|    */
 | |
|   public abstract function numberOfItems();
 | |
| 
 | |
|   /**
 | |
|    * Get the next item.
 | |
|    *
 | |
|    * @param int $lease_time
 | |
|    *   Seconds.
 | |
|    *
 | |
|    * @return object
 | |
|    *   with key 'data' that matches the inputted data
 | |
|    */
 | |
|   public abstract function claimItem($lease_time = 3600);
 | |
| 
 | |
|   /**
 | |
|    * Get the next item, even if there's an active lease
 | |
|    *
 | |
|    * @param int $lease_time
 | |
|    *   Seconds.
 | |
|    *
 | |
|    * @return object
 | |
|    *   with key 'data' that matches the inputted data
 | |
|    */
 | |
|   public abstract function stealItem($lease_time = 3600);
 | |
| 
 | |
|   /**
 | |
|    * Remove an item from the queue.
 | |
|    *
 | |
|    * @param object $item
 | |
|    *   The item returned by claimItem.
 | |
|    */
 | |
|   public abstract function deleteItem($item);
 | |
| 
 | |
|   /**
 | |
|    * Return an item that could not be processed.
 | |
|    *
 | |
|    * @param object $item
 | |
|    *   The item returned by claimItem.
 | |
|    */
 | |
|   public abstract function releaseItem($item);
 | |
| 
 | |
| }
 |