Overview

Namespaces

  • Grpc

Classes

  • Grpc\AbstractCall
  • Grpc\BaseStub
  • Grpc\BidiStreamingCall
  • Grpc\ClientStreamingCall
  • Grpc\ServerStreamingCall
  • Grpc\UnaryCall
  • Overview
  • Namespace
  • Class
  1: <?php
  2: /*
  3:  *
  4:  * Copyright 2015, Google Inc.
  5:  * All rights reserved.
  6:  *
  7:  * Redistribution and use in source and binary forms, with or without
  8:  * modification, are permitted provided that the following conditions are
  9:  * met:
 10:  *
 11:  *     * Redistributions of source code must retain the above copyright
 12:  * notice, this list of conditions and the following disclaimer.
 13:  *     * Redistributions in binary form must reproduce the above
 14:  * copyright notice, this list of conditions and the following disclaimer
 15:  * in the documentation and/or other materials provided with the
 16:  * distribution.
 17:  *     * Neither the name of Google Inc. nor the names of its
 18:  * contributors may be used to endorse or promote products derived from
 19:  * this software without specific prior written permission.
 20:  *
 21:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 22:  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 23:  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 24:  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 25:  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 26:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 27:  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 28:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 29:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 30:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 31:  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 32:  *
 33:  */
 34: 
 35: namespace Grpc;
 36: 
 37: /**
 38:  * Class AbstractCall.
 39:  * @package Grpc
 40:  */
 41: abstract class AbstractCall
 42: {
 43:     /**
 44:      * @var Call
 45:      */
 46:     protected $call;
 47:     protected $deserialize;
 48:     protected $metadata;
 49:     protected $trailing_metadata;
 50: 
 51:     /**
 52:      * Create a new Call wrapper object.
 53:      *
 54:      * @param Channel  $channel     The channel to communicate on
 55:      * @param string   $method      The method to call on the
 56:      *                              remote server
 57:      * @param callback $deserialize A callback function to deserialize
 58:      *                              the response
 59:      * @param array    $options     Call options (optional)
 60:      */
 61:     public function __construct(Channel $channel,
 62:                                 $method,
 63:                                 $deserialize,
 64:                                 array $options = [])
 65:     {
 66:         if (array_key_exists('timeout', $options) &&
 67:             is_numeric($timeout = $options['timeout'])
 68:         ) {
 69:             $now = Timeval::now();
 70:             $delta = new Timeval($timeout);
 71:             $deadline = $now->add($delta);
 72:         } else {
 73:             $deadline = Timeval::infFuture();
 74:         }
 75:         $this->call = new Call($channel, $method, $deadline);
 76:         $this->deserialize = $deserialize;
 77:         $this->metadata = null;
 78:         $this->trailing_metadata = null;
 79:         if (array_key_exists('call_credentials_callback', $options) &&
 80:             is_callable($call_credentials_callback =
 81:                 $options['call_credentials_callback'])
 82:         ) {
 83:             $call_credentials = CallCredentials::createFromPlugin(
 84:                 $call_credentials_callback
 85:             );
 86:             $this->call->setCredentials($call_credentials);
 87:         }
 88:     }
 89: 
 90:     /**
 91:      * @return mixed The metadata sent by the server
 92:      */
 93:     public function getMetadata()
 94:     {
 95:         return $this->metadata;
 96:     }
 97: 
 98:     /**
 99:      * @return mixed The trailing metadata sent by the server
100:      */
101:     public function getTrailingMetadata()
102:     {
103:         return $this->trailing_metadata;
104:     }
105: 
106:     /**
107:      * @return string The URI of the endpoint
108:      */
109:     public function getPeer()
110:     {
111:         return $this->call->getPeer();
112:     }
113: 
114:     /**
115:      * Cancels the call.
116:      */
117:     public function cancel()
118:     {
119:         $this->call->cancel();
120:     }
121: 
122:     /**
123:      * Serialize a message to the protobuf binary format.
124:      *
125:      * @param mixed $data The Protobuf message
126:      *
127:      * @return string The protobuf binary format
128:      */
129:     protected function _serializeMessage($data)
130:     {
131:         // Proto3 implementation
132:         if (method_exists($data, 'encode')) {
133:             return $data->encode();
134:         }
135: 
136:         // Protobuf-PHP implementation
137:         return $data->serialize();
138:     }
139: 
140:     /**
141:      * Deserialize a response value to an object.
142:      *
143:      * @param string $value The binary value to deserialize
144:      *
145:      * @return mixed The deserialized value
146:      */
147:     protected function _deserializeResponse($value)
148:     {
149:         if ($value === null) {
150:             return;
151:         }
152: 
153:         // Proto3 implementation
154:         if (is_array($this->deserialize)) {
155:             list($className, $deserializeFunc) = $this->deserialize;
156:             $obj = new $className();
157:             $obj->$deserializeFunc($value);
158: 
159:             return $obj;
160:         }
161: 
162:         // Protobuf-PHP implementation
163:         return call_user_func($this->deserialize, $value);
164:     }
165: 
166:     /**
167:      * Set the CallCredentials for the underlying Call.
168:      *
169:      * @param CallCredentials $call_credentials The CallCredentials object
170:      */
171:     public function setCallCredentials($call_credentials)
172:     {
173:         $this->call->setCredentials($call_credentials);
174:     }
175: }
176: 
API documentation generated by ApiGen