示例#1
0
 /**
  * Update data inside descriptor to make one more attempt
  *
  * @param RequestDescriptor $descriptor Operation descriptor
  * @param string            $when When Timeout occurerd, one of TimeoutEvent::DURING_* consts
  *
  * @return void
  */
 private function updateMetadataForAttempt(RequestDescriptor $descriptor, $when)
 {
     switch ($when) {
         case TimeoutEvent::DURING_IO:
             $descriptor->setMetadata(RequestExecutorInterface::META_LAST_IO_START_TIME, null);
             break;
         case TimeoutEvent::DURING_CONNECTION:
             $descriptor->setRunning(false);
             $descriptor->setMetadata([RequestExecutorInterface::META_LAST_IO_START_TIME => null, RequestExecutorInterface::META_CONNECTION_START_TIME => null, RequestExecutorInterface::META_CONNECTION_FINISH_TIME => null]);
             break;
     }
 }
 /**
  * Set start or finish time in metadata of the socket
  *
  * @param RequestDescriptor $requestDescriptor Socket meta data
  * @param string            $key Metadata key to set
  *
  * @return void
  * @throws \InvalidArgumentException
  */
 protected function setSocketOperationTime(RequestDescriptor $requestDescriptor, $key)
 {
     $meta = $requestDescriptor->getMetadata();
     $table = [RequestExecutorInterface::META_CONNECTION_START_TIME => $meta[RequestExecutorInterface::META_CONNECTION_START_TIME] === null, RequestExecutorInterface::META_CONNECTION_FINISH_TIME => $meta[RequestExecutorInterface::META_CONNECTION_FINISH_TIME] === null, RequestExecutorInterface::META_LAST_IO_START_TIME => $meta[RequestExecutorInterface::META_CONNECTION_FINISH_TIME] !== null];
     if (isset($table[$key]) && $table[$key]) {
         $requestDescriptor->setMetadata($key, microtime(true));
     }
 }
 /**
  * Disconnects given socket descriptor
  *
  * @param RequestDescriptor $descriptor Socket descriptor
  *
  * @return void
  */
 public function disconnect(RequestDescriptor $descriptor)
 {
     $meta = $descriptor->getMetadata();
     $socket = $descriptor->getSocket();
     $descriptor->setMetadata(RequestExecutorInterface::META_REQUEST_COMPLETE, true);
     try {
         $socket->close();
         if ($meta[RequestExecutorInterface::META_CONNECTION_FINISH_TIME] !== null) {
             $this->callSocketSubscribers($descriptor, $this->createEvent($descriptor, EventType::DISCONNECTED));
         }
     } catch (SocketException $e) {
         $this->callExceptionSubscribers($descriptor, $e);
     }
     $this->callSocketSubscribers($descriptor, $this->createEvent($descriptor, EventType::FINALIZE));
     $this->removeOperationsFromSelector($descriptor);
 }
示例#4
0
 /**
  * Fill next operation in given object and return flag indicating whether operation is required
  *
  * @param RequestDescriptor  $requestDescriptor Request descriptor object
  * @param OperationInterface $nextOperation Next operation object
  *
  * @return bool True if given operation is complete
  */
 private function resolveNextOperation(RequestDescriptor $requestDescriptor, OperationInterface $nextOperation)
 {
     if ($nextOperation instanceof NullOperation) {
         $requestDescriptor->setOperation($nextOperation);
         return true;
     }
     if ($requestDescriptor->getOperation() === $nextOperation) {
         return false;
     }
     $requestDescriptor->setOperation($nextOperation);
     $requestDescriptor->setMetadata([RequestExecutorInterface::META_LAST_IO_START_TIME => null]);
     return false;
 }