1*cc02d7e2SAndroid Build Coastguard Worker<?php 2*cc02d7e2SAndroid Build Coastguard Worker/* 3*cc02d7e2SAndroid Build Coastguard Worker * 4*cc02d7e2SAndroid Build Coastguard Worker * Copyright 2015 gRPC authors. 5*cc02d7e2SAndroid Build Coastguard Worker * 6*cc02d7e2SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 7*cc02d7e2SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 8*cc02d7e2SAndroid Build Coastguard Worker * You may obtain a copy of the License at 9*cc02d7e2SAndroid Build Coastguard Worker * 10*cc02d7e2SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 11*cc02d7e2SAndroid Build Coastguard Worker * 12*cc02d7e2SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 13*cc02d7e2SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 14*cc02d7e2SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15*cc02d7e2SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 16*cc02d7e2SAndroid Build Coastguard Worker * limitations under the License. 17*cc02d7e2SAndroid Build Coastguard Worker * 18*cc02d7e2SAndroid Build Coastguard Worker */ 19*cc02d7e2SAndroid Build Coastguard Worker 20*cc02d7e2SAndroid Build Coastguard Workernamespace Grpc; 21*cc02d7e2SAndroid Build Coastguard Worker 22*cc02d7e2SAndroid Build Coastguard Worker/** 23*cc02d7e2SAndroid Build Coastguard Worker * Class AbstractCall. 24*cc02d7e2SAndroid Build Coastguard Worker * @package Grpc 25*cc02d7e2SAndroid Build Coastguard Worker */ 26*cc02d7e2SAndroid Build Coastguard Workerabstract class AbstractCall 27*cc02d7e2SAndroid Build Coastguard Worker{ 28*cc02d7e2SAndroid Build Coastguard Worker /** 29*cc02d7e2SAndroid Build Coastguard Worker * @var Call 30*cc02d7e2SAndroid Build Coastguard Worker */ 31*cc02d7e2SAndroid Build Coastguard Worker protected $call; 32*cc02d7e2SAndroid Build Coastguard Worker protected $deserialize; 33*cc02d7e2SAndroid Build Coastguard Worker protected $metadata; 34*cc02d7e2SAndroid Build Coastguard Worker protected $trailing_metadata; 35*cc02d7e2SAndroid Build Coastguard Worker 36*cc02d7e2SAndroid Build Coastguard Worker /** 37*cc02d7e2SAndroid Build Coastguard Worker * Create a new Call wrapper object. 38*cc02d7e2SAndroid Build Coastguard Worker * 39*cc02d7e2SAndroid Build Coastguard Worker * @param Channel $channel The channel to communicate on 40*cc02d7e2SAndroid Build Coastguard Worker * @param string $method The method to call on the 41*cc02d7e2SAndroid Build Coastguard Worker * remote server 42*cc02d7e2SAndroid Build Coastguard Worker * @param callback $deserialize A callback function to deserialize 43*cc02d7e2SAndroid Build Coastguard Worker * the response 44*cc02d7e2SAndroid Build Coastguard Worker * @param array $options Call options (optional) 45*cc02d7e2SAndroid Build Coastguard Worker */ 46*cc02d7e2SAndroid Build Coastguard Worker public function __construct(Channel $channel, 47*cc02d7e2SAndroid Build Coastguard Worker $method, 48*cc02d7e2SAndroid Build Coastguard Worker $deserialize, 49*cc02d7e2SAndroid Build Coastguard Worker array $options = []) 50*cc02d7e2SAndroid Build Coastguard Worker { 51*cc02d7e2SAndroid Build Coastguard Worker if (array_key_exists('timeout', $options) && 52*cc02d7e2SAndroid Build Coastguard Worker is_numeric($timeout = $options['timeout']) 53*cc02d7e2SAndroid Build Coastguard Worker ) { 54*cc02d7e2SAndroid Build Coastguard Worker $now = Timeval::now(); 55*cc02d7e2SAndroid Build Coastguard Worker $delta = new Timeval($timeout); 56*cc02d7e2SAndroid Build Coastguard Worker $deadline = $now->add($delta); 57*cc02d7e2SAndroid Build Coastguard Worker } else { 58*cc02d7e2SAndroid Build Coastguard Worker $deadline = Timeval::infFuture(); 59*cc02d7e2SAndroid Build Coastguard Worker } 60*cc02d7e2SAndroid Build Coastguard Worker $this->call = new Call($channel, $method, $deadline); 61*cc02d7e2SAndroid Build Coastguard Worker $this->deserialize = $deserialize; 62*cc02d7e2SAndroid Build Coastguard Worker $this->metadata = null; 63*cc02d7e2SAndroid Build Coastguard Worker $this->trailing_metadata = null; 64*cc02d7e2SAndroid Build Coastguard Worker if (array_key_exists('call_credentials_callback', $options) && 65*cc02d7e2SAndroid Build Coastguard Worker is_callable($call_credentials_callback = 66*cc02d7e2SAndroid Build Coastguard Worker $options['call_credentials_callback']) 67*cc02d7e2SAndroid Build Coastguard Worker ) { 68*cc02d7e2SAndroid Build Coastguard Worker $call_credentials = CallCredentials::createFromPlugin( 69*cc02d7e2SAndroid Build Coastguard Worker $call_credentials_callback 70*cc02d7e2SAndroid Build Coastguard Worker ); 71*cc02d7e2SAndroid Build Coastguard Worker $this->call->setCredentials($call_credentials); 72*cc02d7e2SAndroid Build Coastguard Worker } 73*cc02d7e2SAndroid Build Coastguard Worker } 74*cc02d7e2SAndroid Build Coastguard Worker 75*cc02d7e2SAndroid Build Coastguard Worker /** 76*cc02d7e2SAndroid Build Coastguard Worker * @return mixed The metadata sent by the server 77*cc02d7e2SAndroid Build Coastguard Worker */ 78*cc02d7e2SAndroid Build Coastguard Worker public function getMetadata() 79*cc02d7e2SAndroid Build Coastguard Worker { 80*cc02d7e2SAndroid Build Coastguard Worker return $this->metadata; 81*cc02d7e2SAndroid Build Coastguard Worker } 82*cc02d7e2SAndroid Build Coastguard Worker 83*cc02d7e2SAndroid Build Coastguard Worker /** 84*cc02d7e2SAndroid Build Coastguard Worker * @return mixed The trailing metadata sent by the server 85*cc02d7e2SAndroid Build Coastguard Worker */ 86*cc02d7e2SAndroid Build Coastguard Worker public function getTrailingMetadata() 87*cc02d7e2SAndroid Build Coastguard Worker { 88*cc02d7e2SAndroid Build Coastguard Worker return $this->trailing_metadata; 89*cc02d7e2SAndroid Build Coastguard Worker } 90*cc02d7e2SAndroid Build Coastguard Worker 91*cc02d7e2SAndroid Build Coastguard Worker /** 92*cc02d7e2SAndroid Build Coastguard Worker * @return string The URI of the endpoint 93*cc02d7e2SAndroid Build Coastguard Worker */ 94*cc02d7e2SAndroid Build Coastguard Worker public function getPeer() 95*cc02d7e2SAndroid Build Coastguard Worker { 96*cc02d7e2SAndroid Build Coastguard Worker return $this->call->getPeer(); 97*cc02d7e2SAndroid Build Coastguard Worker } 98*cc02d7e2SAndroid Build Coastguard Worker 99*cc02d7e2SAndroid Build Coastguard Worker /** 100*cc02d7e2SAndroid Build Coastguard Worker * Cancels the call. 101*cc02d7e2SAndroid Build Coastguard Worker */ 102*cc02d7e2SAndroid Build Coastguard Worker public function cancel() 103*cc02d7e2SAndroid Build Coastguard Worker { 104*cc02d7e2SAndroid Build Coastguard Worker $this->call->cancel(); 105*cc02d7e2SAndroid Build Coastguard Worker } 106*cc02d7e2SAndroid Build Coastguard Worker 107*cc02d7e2SAndroid Build Coastguard Worker /** 108*cc02d7e2SAndroid Build Coastguard Worker * Serialize a message to the protobuf binary format. 109*cc02d7e2SAndroid Build Coastguard Worker * 110*cc02d7e2SAndroid Build Coastguard Worker * @param mixed $data The Protobuf message 111*cc02d7e2SAndroid Build Coastguard Worker * 112*cc02d7e2SAndroid Build Coastguard Worker * @return string The protobuf binary format 113*cc02d7e2SAndroid Build Coastguard Worker */ 114*cc02d7e2SAndroid Build Coastguard Worker protected function _serializeMessage($data) 115*cc02d7e2SAndroid Build Coastguard Worker { 116*cc02d7e2SAndroid Build Coastguard Worker // Proto3 implementation 117*cc02d7e2SAndroid Build Coastguard Worker return $data->serializeToString(); 118*cc02d7e2SAndroid Build Coastguard Worker } 119*cc02d7e2SAndroid Build Coastguard Worker 120*cc02d7e2SAndroid Build Coastguard Worker /** 121*cc02d7e2SAndroid Build Coastguard Worker * Deserialize a response value to an object. 122*cc02d7e2SAndroid Build Coastguard Worker * 123*cc02d7e2SAndroid Build Coastguard Worker * @param string $value The binary value to deserialize 124*cc02d7e2SAndroid Build Coastguard Worker * 125*cc02d7e2SAndroid Build Coastguard Worker * @return mixed The deserialized value 126*cc02d7e2SAndroid Build Coastguard Worker */ 127*cc02d7e2SAndroid Build Coastguard Worker protected function _deserializeResponse($value) 128*cc02d7e2SAndroid Build Coastguard Worker { 129*cc02d7e2SAndroid Build Coastguard Worker if ($value === null) { 130*cc02d7e2SAndroid Build Coastguard Worker return; 131*cc02d7e2SAndroid Build Coastguard Worker } 132*cc02d7e2SAndroid Build Coastguard Worker list($className, $deserializeFunc) = $this->deserialize; 133*cc02d7e2SAndroid Build Coastguard Worker $obj = new $className(); 134*cc02d7e2SAndroid Build Coastguard Worker $obj->mergeFromString($value); 135*cc02d7e2SAndroid Build Coastguard Worker return $obj; 136*cc02d7e2SAndroid Build Coastguard Worker } 137*cc02d7e2SAndroid Build Coastguard Worker 138*cc02d7e2SAndroid Build Coastguard Worker /** 139*cc02d7e2SAndroid Build Coastguard Worker * Set the CallCredentials for the underlying Call. 140*cc02d7e2SAndroid Build Coastguard Worker * 141*cc02d7e2SAndroid Build Coastguard Worker * @param CallCredentials $call_credentials The CallCredentials object 142*cc02d7e2SAndroid Build Coastguard Worker */ 143*cc02d7e2SAndroid Build Coastguard Worker public function setCallCredentials($call_credentials) 144*cc02d7e2SAndroid Build Coastguard Worker { 145*cc02d7e2SAndroid Build Coastguard Worker $this->call->setCredentials($call_credentials); 146*cc02d7e2SAndroid Build Coastguard Worker } 147*cc02d7e2SAndroid Build Coastguard Worker} 148