active = $endpoints; reset($this->active); } /** * Gets an active (unexpired) endpoint. Returns null if none found. * * @return null|string */ public function getActive() { if (count($this->active) < 1) { return null; } while (time() > current($this->active)) { $key = key($this->active); $this->expired[$key] = current($this->active); $this->increment($this->active); unset($this->active[$key]); if (count($this->active) < 1) { return null; } } $active = key($this->active); $this->increment($this->active); return $active; } /** * Gets an active endpoint if possible, then an expired endpoint if possible. * Returns null if no endpoints found. * * @return null|string */ public function getEndpoint() { if (!empty($active = $this->getActive())) { return $active; } return $this->getExpired(); } /** * Removes an endpoint from both lists. * * @param string $key */ public function remove($key) { unset($this->active[$key]); unset($this->expired[$key]); } /** * Get an expired endpoint. Returns null if none found. * * @return null|string */ private function getExpired() { if (count($this->expired) < 1) { return null; } $expired = key($this->expired); $this->increment($this->expired); return $expired; } private function increment(&$array) { if (next($array) === false) { reset($array); } } }