add($delta); } else { $deadline = Timeval::infFuture(); } $this->call = new Call($channel, $method, $deadline); $this->deserialize = $deserialize; $this->metadata = null; $this->trailing_metadata = null; if (array_key_exists('call_credentials_callback', $options) && is_callable($call_credentials_callback = $options['call_credentials_callback']) ) { $call_credentials = CallCredentials::createFromPlugin( $call_credentials_callback ); $this->call->setCredentials($call_credentials); } } /** * @return mixed The metadata sent by the server */ public function getMetadata() { return $this->metadata; } /** * @return mixed The trailing metadata sent by the server */ public function getTrailingMetadata() { return $this->trailing_metadata; } /** * @return string The URI of the endpoint */ public function getPeer() { return $this->call->getPeer(); } /** * Cancels the call. */ public function cancel() { $this->call->cancel(); } /** * Serialize a message to the protobuf binary format. * * @param mixed $data The Protobuf message * * @return string The protobuf binary format */ protected function _serializeMessage($data) { // Proto3 implementation if (method_exists($data, 'encode')) { return $data->encode(); } elseif (method_exists($data, 'serializeToString')) { return $data->serializeToString(); } // Protobuf-PHP implementation return $data->serialize(); } /** * Deserialize a response value to an object. * * @param string $value The binary value to deserialize * * @return mixed The deserialized value */ protected function _deserializeResponse($value) { if ($value === null) { return; } // Proto3 implementation if (is_array($this->deserialize)) { list($className, $deserializeFunc) = $this->deserialize; $obj = new $className(); if (method_exists($obj, $deserializeFunc)) { $obj->$deserializeFunc($value); } else { $obj->mergeFromString($value); } return $obj; } // Protobuf-PHP implementation return call_user_func($this->deserialize, $value); } /** * Set the CallCredentials for the underlying Call. * * @param CallCredentials $call_credentials The CallCredentials object */ public function setCallCredentials($call_credentials) { $this->call->setCredentials($call_credentials); } }