diff options
-rwxr-xr-x | src/php/lib/Grpc/AbstractSurfaceActiveCall.php | 64 | ||||
-rwxr-xr-x | src/php/lib/Grpc/ActiveCall.php | 1 | ||||
-rwxr-xr-x | src/php/lib/Grpc/BaseStub.php | 2 | ||||
-rwxr-xr-x | src/php/lib/Grpc/BidiStreamingSurfaceActiveCall.php | 43 | ||||
-rwxr-xr-x | src/php/lib/Grpc/ClientStreamingSurfaceActiveCall.php | 39 | ||||
-rwxr-xr-x | src/php/lib/Grpc/ServerStreamingSurfaceActiveCall.php | 42 | ||||
-rwxr-xr-x | src/php/lib/Grpc/SimpleSurfaceActiveCall.php | 39 | ||||
-rwxr-xr-x | src/php/lib/Grpc/SurfaceActiveCall.php | 211 | ||||
-rwxr-xr-x | src/php/lib/autoload.php | 21 | ||||
-rwxr-xr-x | src/php/tests/generated_code/GeneratedCodeTest.php | 4 | ||||
-rwxr-xr-x | src/php/tests/interop/interop_client.php | 4 |
11 files changed, 252 insertions, 218 deletions
diff --git a/src/php/lib/Grpc/AbstractSurfaceActiveCall.php b/src/php/lib/Grpc/AbstractSurfaceActiveCall.php new file mode 100755 index 0000000000..53c7d4cd1a --- /dev/null +++ b/src/php/lib/Grpc/AbstractSurfaceActiveCall.php @@ -0,0 +1,64 @@ +<?php +namespace Grpc; + +require_once realpath(dirname(__FILE__) . '/../autoload.php'); + +/** + * Represents an active call that allows sending and recieving messages. + * Subclasses restrict how data can be sent and recieved. + */ +abstract class AbstractSurfaceActiveCall { + private $active_call; + private $deserialize; + + /** + * Create a new surface active call. + * @param Channel $channel The channel to communicate on + * @param string $method The method to call on the remote server + * @param callable $deserialize The function to deserialize a value + * @param array $metadata Metadata to send with the call, if applicable + * @param long $flags Write flags to use with this call + */ + public function __construct(Channel $channel, + $method, + callable $deserialize, + $metadata = array(), + $flags = 0) { + $this->active_call = new ActiveCall($channel, $method, $metadata, $flags); + $this->deserialize = $deserialize; + } + + /** + * @return The metadata sent by the server + */ + public function getMetadata() { + return $this->metadata(); + } + + /** + * Cancels the call + */ + public function cancel() { + $this->active_call->cancel(); + } + + protected function _read() { + $response = $this->active_call->read(); + if ($response == null) { + return null; + } + return call_user_func($this->deserialize, $response); + } + + protected function _write($value) { + return $this->active_call->write($value->serialize()); + } + + protected function _writesDone() { + $this->active_call->writesDone(); + } + + protected function _getStatus() { + return $this->active_call->getStatus(); + } +}
\ No newline at end of file diff --git a/src/php/lib/Grpc/ActiveCall.php b/src/php/lib/Grpc/ActiveCall.php index fb307c76c4..aa66dbb848 100755 --- a/src/php/lib/Grpc/ActiveCall.php +++ b/src/php/lib/Grpc/ActiveCall.php @@ -1,5 +1,6 @@ <?php namespace Grpc; +require_once realpath(dirname(__FILE__) . '/../autoload.php'); /** * Represents an active call that allows sending and recieving binary data diff --git a/src/php/lib/Grpc/BaseStub.php b/src/php/lib/Grpc/BaseStub.php index 7aa0c4ac4d..e1feb1206b 100755 --- a/src/php/lib/Grpc/BaseStub.php +++ b/src/php/lib/Grpc/BaseStub.php @@ -1,6 +1,6 @@ <?php - namespace Grpc; +require_once realpath(dirname(__FILE__) . '/../autoload.php'); /** * Base class for generated client stubs. Stub methods are expected to call diff --git a/src/php/lib/Grpc/BidiStreamingSurfaceActiveCall.php b/src/php/lib/Grpc/BidiStreamingSurfaceActiveCall.php new file mode 100755 index 0000000000..b5d557e02d --- /dev/null +++ b/src/php/lib/Grpc/BidiStreamingSurfaceActiveCall.php @@ -0,0 +1,43 @@ +<?php +namespace Grpc; +require_once realpath(dirname(__FILE__) . '/../autoload.php'); + +/** + * Represents an active call that allows for sending and recieving messages in + * streams in any order. + */ +class BidiStreamingSurfaceActiveCall extends AbstractSurfaceActiveCall { + + /** + * Reads the next value from the server. + * @return The next value from the server, or null if there is none + */ + public function read() { + return $this->_read(); + } + + /** + * Writes a single message to the server. This cannot be called after + * writesDone is called. + * @param $value The message to send + */ + public function write($value) { + $this->_write($value); + } + + /** + * Indicate that no more writes will be sent + */ + public function writesDone() { + $this->_writesDone(); + } + + /** + * Wait for the server to send the status, and return it. + * @return object The status object, with integer $code and string $details + * members + */ + public function getStatus() { + return $this->_getStatus(); + } +}
\ No newline at end of file diff --git a/src/php/lib/Grpc/ClientStreamingSurfaceActiveCall.php b/src/php/lib/Grpc/ClientStreamingSurfaceActiveCall.php new file mode 100755 index 0000000000..fa643e50a8 --- /dev/null +++ b/src/php/lib/Grpc/ClientStreamingSurfaceActiveCall.php @@ -0,0 +1,39 @@ +<?php +namespace Grpc; +require_once realpath(dirname(__FILE__) . '/../autoload.php'); + +/** + * Represents an active call that sends a stream of messages and then gets a + * single response. + */ +class ClientStreamingSurfaceActiveCall extends AbstractSurfaceActiveCall { + /** + * Create a new simple (single request/single response) active call. + * @param Channel $channel The channel to communicate on + * @param string $method The method to call on the remote server + * @param callable $deserialize The function to deserialize a value + * @param Traversable $arg_iter The iterator of arguments to send + * @param array $metadata Metadata to send with the call, if applicable + */ + public function __construct(Channel $channel, + $method, + callable $deserialize, + $arg_iter, + $metadata = array()) { + parent::__construct($channel, $method, $deserialize, $metadata, 0); + foreach($arg_iter as $arg) { + $this->_write($arg); + } + $this->_writesDone(); + } + + /** + * Wait for the server to respond with data and a status + * @return [response data, status] + */ + public function wait() { + $response = $this->_read(); + $status = $this->_getStatus(); + return array($response, $status); + } +} diff --git a/src/php/lib/Grpc/ServerStreamingSurfaceActiveCall.php b/src/php/lib/Grpc/ServerStreamingSurfaceActiveCall.php new file mode 100755 index 0000000000..082f995d8a --- /dev/null +++ b/src/php/lib/Grpc/ServerStreamingSurfaceActiveCall.php @@ -0,0 +1,42 @@ +<?php +namespace Grpc; + +require_once realpath(dirname(__FILE__) . '/../autoload.php'); + +/** + * Represents an active call that sends a single message and then gets a stream + * of reponses + */ +class ServerStreamingSurfaceActiveCall extends AbstractSurfaceActiveCall { + /** + * Create a new simple (single request/single response) active call. + * @param Channel $channel The channel to communicate on + * @param string $method The method to call on the remote server + * @param callable $deserialize The function to deserialize a value + * @param $arg The argument to send + * @param array $metadata Metadata to send with the call, if applicable + */ + public function __construct(Channel $channel, + $method, + callable $deserialize, + $arg, + $metadata = array()) { + parent::__construct($channel, $method, $deserialize, $metadata, + \Grpc\WRITE_BUFFER_HINT); + $this->_write($arg); + $this->_writesDone(); + } + + /** + * @return An iterator of response values + */ + public function responses() { + while(($response = $this->_read()) != null) { + yield $response; + } + } + + public function getStatus() { + return $this->_getStatus(); + } +} diff --git a/src/php/lib/Grpc/SimpleSurfaceActiveCall.php b/src/php/lib/Grpc/SimpleSurfaceActiveCall.php new file mode 100755 index 0000000000..f352573f34 --- /dev/null +++ b/src/php/lib/Grpc/SimpleSurfaceActiveCall.php @@ -0,0 +1,39 @@ +<?php +namespace Grpc; + +require_once realpath(dirname(__FILE__) . '/../autoload.php'); + +/** + * Represents an active call that sends a single message and then gets a single + * response. + */ +class SimpleSurfaceActiveCall extends AbstractSurfaceActiveCall { + /** + * Create a new simple (single request/single response) active call. + * @param Channel $channel The channel to communicate on + * @param string $method The method to call on the remote server + * @param callable $deserialize The function to deserialize a value + * @param $arg The argument to send + * @param array $metadata Metadata to send with the call, if applicable + */ + public function __construct(Channel $channel, + $method, + callable $deserialize, + $arg, + $metadata = array()) { + parent::__construct($channel, $method, $deserialize, $metadata, + \Grpc\WRITE_BUFFER_HINT); + $this->_write($arg); + $this->_writesDone(); + } + + /** + * Wait for the server to respond with data and a status + * @return [response data, status] + */ + public function wait() { + $response = $this->_read(); + $status = $this->_getStatus(); + return array($response, $status); + } +} diff --git a/src/php/lib/Grpc/SurfaceActiveCall.php b/src/php/lib/Grpc/SurfaceActiveCall.php deleted file mode 100755 index 5f94303357..0000000000 --- a/src/php/lib/Grpc/SurfaceActiveCall.php +++ /dev/null @@ -1,211 +0,0 @@ -<?php -namespace Grpc; - -/** - * Represents an active call that allows sending and recieving messages. - * Subclasses restrict how data can be sent and recieved. - */ -abstract class AbstractSurfaceActiveCall { - private $active_call; - private $deserialize; - - /** - * Create a new surface active call. - * @param Channel $channel The channel to communicate on - * @param string $method The method to call on the remote server - * @param callable $deserialize The function to deserialize a value - * @param array $metadata Metadata to send with the call, if applicable - * @param long $flags Write flags to use with this call - */ - public function __construct(Channel $channel, - $method, - callable $deserialize, - $metadata = array(), - $flags = 0) { - $this->active_call = new ActiveCall($channel, $method, $metadata, $flags); - $this->deserialize = $deserialize; - } - - /** - * @return The metadata sent by the server - */ - public function getMetadata() { - return $this->metadata(); - } - - /** - * Cancels the call - */ - public function cancel() { - $this->active_call->cancel(); - } - - protected function _read() { - $response = $this->active_call->read(); - if ($response == null) { - return null; - } - return call_user_func($this->deserialize, $response); - } - - protected function _write($value) { - return $this->active_call->write($value->serialize()); - } - - protected function _writesDone() { - $this->active_call->writesDone(); - } - - protected function _getStatus() { - return $this->active_call->getStatus(); - } -} - -/** - * Represents an active call that sends a single message and then gets a single - * response. - */ -class SimpleSurfaceActiveCall extends AbstractSurfaceActiveCall { - /** - * Create a new simple (single request/single response) active call. - * @param Channel $channel The channel to communicate on - * @param string $method The method to call on the remote server - * @param callable $deserialize The function to deserialize a value - * @param $arg The argument to send - * @param array $metadata Metadata to send with the call, if applicable - */ - public function __construct(Channel $channel, - $method, - callable $deserialize, - $arg, - $metadata = array()) { - parent::__construct($channel, $method, $deserialize, $metadata, - \Grpc\WRITE_BUFFER_HINT); - $this->_write($arg); - $this->_writesDone(); - } - - /** - * Wait for the server to respond with data and a status - * @return [response data, status] - */ - public function wait() { - $response = $this->_read(); - $status = $this->_getStatus(); - return array($response, $status); - } -} - -/** - * Represents an active call that sends a stream of messages and then gets a - * single response. - */ -class ClientStreamingSurfaceActiveCall extends AbstractSurfaceActiveCall { - /** - * Create a new simple (single request/single response) active call. - * @param Channel $channel The channel to communicate on - * @param string $method The method to call on the remote server - * @param callable $deserialize The function to deserialize a value - * @param Traversable $arg_iter The iterator of arguments to send - * @param array $metadata Metadata to send with the call, if applicable - */ - public function __construct(Channel $channel, - $method, - callable $deserialize, - $arg_iter, - $metadata = array()) { - parent::__construct($channel, $method, $deserialize, $metadata, 0); - foreach($arg_iter as $arg) { - $this->_write($arg); - } - $this->_writesDone(); - } - - /** - * Wait for the server to respond with data and a status - * @return [response data, status] - */ - public function wait() { - $response = $this->_read(); - $status = $this->_getStatus(); - return array($response, $status); - } -} - -/** - * Represents an active call that sends a single message and then gets a stream - * of reponses - */ -class ServerStreamingSurfaceActiveCall extends AbstractSurfaceActiveCall { - /** - * Create a new simple (single request/single response) active call. - * @param Channel $channel The channel to communicate on - * @param string $method The method to call on the remote server - * @param callable $deserialize The function to deserialize a value - * @param $arg The argument to send - * @param array $metadata Metadata to send with the call, if applicable - */ - public function __construct(Channel $channel, - $method, - callable $deserialize, - $arg, - $metadata = array()) { - parent::__construct($channel, $method, $deserialize, $metadata, - \Grpc\WRITE_BUFFER_HINT); - $this->_write($arg); - $this->_writesDone(); - } - - /** - * @return An iterator of response values - */ - public function responses() { - while(($response = $this->_read()) != null) { - yield $response; - } - } - - public function getStatus() { - return $this->_getStatus(); - } -} - -/** - * Represents an active call that allows for sending and recieving messages in - * streams in any order. - */ -class BidiStreamingSurfaceActiveCall extends AbstractSurfaceActiveCall { - - /** - * Reads the next value from the server. - * @return The next value from the server, or null if there is none - */ - public function read() { - return $this->_read(); - } - - /** - * Writes a single message to the server. This cannot be called after - * writesDone is called. - * @param $value The message to send - */ - public function write($value) { - $this->_write($value); - } - - /** - * Indicate that no more writes will be sent - */ - public function writesDone() { - $this->_writesDone(); - } - - /** - * Wait for the server to send the status, and return it. - * @return object The status object, with integer $code and string $details - * members - */ - public function getStatus() { - return $this->_getStatus(); - } -}
\ No newline at end of file diff --git a/src/php/lib/autoload.php b/src/php/lib/autoload.php new file mode 100755 index 0000000000..8ae094730a --- /dev/null +++ b/src/php/lib/autoload.php @@ -0,0 +1,21 @@ +<?php +function grpcAutoloader($class) { + $prefix = 'Grpc\\'; + + $base_dir = __DIR__ . '/Grpc/'; + + $len = strlen($prefix); + if (strncmp($prefix, $class, $len) !== 0) { + return; + } + + $relative_class = substr($class, $len); + + $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php'; + + if (file_exists($file)) { + include $file; + } +} + +spl_autoload_register('grpcAutoloader');
\ No newline at end of file diff --git a/src/php/tests/generated_code/GeneratedCodeTest.php b/src/php/tests/generated_code/GeneratedCodeTest.php index d8d726e21a..42d25e4614 100755 --- a/src/php/tests/generated_code/GeneratedCodeTest.php +++ b/src/php/tests/generated_code/GeneratedCodeTest.php @@ -1,7 +1,5 @@ <?php -require __DIR__ . '/../../lib/Grpc/ActiveCall.php'; -require __DIR__ . '/../../lib/Grpc/SurfaceActiveCall.php'; -require __DIR__ . '/../../lib/Grpc/BaseStub.php'; +require_once realpath(dirname(__FILE__) . '/../../lib/autoload.php'); require 'DrSlump/Protobuf.php'; \DrSlump\Protobuf::autoload(); require 'math.php'; diff --git a/src/php/tests/interop/interop_client.php b/src/php/tests/interop/interop_client.php index 9810c86272..43da47fd53 100755 --- a/src/php/tests/interop/interop_client.php +++ b/src/php/tests/interop/interop_client.php @@ -1,7 +1,5 @@ <?php -require __DIR__ . '/../../lib/Grpc/ActiveCall.php'; -require __DIR__ . '/../../lib/Grpc/SurfaceActiveCall.php'; -require __DIR__ . '/../../lib/Grpc/BaseStub.php'; +require_once realpath(dirname(__FILE__) . '/../../lib/autoload.php'); require 'DrSlump/Protobuf.php'; \DrSlump\Protobuf::autoload(); require 'empty.php'; |