public function onError(ResourceEvent $event)
 {
     $key = $event->getParam('key');
     $keys = [];
     $file = $this->getFile();
     if (file_exists($file)) {
         $keys = json_decode(file_get_contents($file), true) ?: $keys;
     }
     $keys[] = $key;
     $keys = array_unique($keys);
     file_put_contents($file, json_encode($keys), LOCK_EX);
 }
Ejemplo n.º 2
0
 /**
  * @param array $keys
  * @return Adapter\AbstractResourceAdapter
  */
 protected function resourceLoopConnect(array $keys)
 {
     $resource = null;
     $event = new ResourceEvent();
     $event->setTarget($this);
     $event->setParam('keys', $keys);
     $event->setName(ResourceEvent::EVENT_CONNECTION_PRE);
     $results = $this->getEventManager()->triggerEvent($event);
     if (is_array($results->last())) {
         $keys = array_diff($keys, $results->last());
     }
     foreach ($keys as $key) {
         $event->setParam('key', $key);
         $event->setParam('resource', $this->getResource($key));
         try {
             $resource = $this->getResource($key)->connect();
             $event->setName(ResourceEvent::EVENT_CONNECTION_SUCCESS);
             $this->getEventManager()->triggerEvent($event);
             break;
         } catch (ConnectionException $e) {
             $event->setParam('exception', $e);
             $event->setName(ResourceEvent::EVENT_CONNECTION_ERROR);
             $results = $this->getEventManager()->triggerEvent($event);
             $last = $results->last();
             if ($last instanceof ResourceInterface) {
                 $resource = $last->connect();
                 break;
             }
         }
     }
     if (!$resource) {
         throw new \RuntimeException('All server is broken.', 0, $event->getParam('exception'));
     }
     return $resource;
 }