aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/php/lib
diff options
context:
space:
mode:
authorGravatar murgatroid99 <mlumish@google.com>2015-04-01 11:14:16 -0700
committerGravatar murgatroid99 <mlumish@google.com>2015-04-01 11:14:16 -0700
commitd8cc6b8e7273cae65d1433ba695a5fd9816925ba (patch)
tree4d21cda9bed75af9ac6b961b66ae378714bc8580 /src/php/lib
parent954177c9ef6b96cc1a7f9f758501836a0eb53569 (diff)
Do not expect metadata until expecting first read
Diffstat (limited to 'src/php/lib')
-rw-r--r--src/php/lib/Grpc/AbstractCall.php1
-rw-r--r--src/php/lib/Grpc/BidiStreamingCall.php14
-rw-r--r--src/php/lib/Grpc/ClientStreamingCall.php7
3 files changed, 13 insertions, 9 deletions
diff --git a/src/php/lib/Grpc/AbstractCall.php b/src/php/lib/Grpc/AbstractCall.php
index d81df97067..413d5966e1 100644
--- a/src/php/lib/Grpc/AbstractCall.php
+++ b/src/php/lib/Grpc/AbstractCall.php
@@ -47,6 +47,7 @@ abstract class AbstractCall {
public function __construct(Channel $channel, $method, $deserialize) {
$this->call = new Call($channel, $method, Timeval::inf_future());
$this->deserialize = $deserialize;
+ $this->metadata = null;
}
/**
diff --git a/src/php/lib/Grpc/BidiStreamingCall.php b/src/php/lib/Grpc/BidiStreamingCall.php
index 454f7621ae..2afceafce9 100644
--- a/src/php/lib/Grpc/BidiStreamingCall.php
+++ b/src/php/lib/Grpc/BidiStreamingCall.php
@@ -43,10 +43,7 @@ class BidiStreamingCall extends AbstractCall {
* @param array $metadata Metadata to send with the call, if applicable
*/
public function start($metadata) {
- $event = $this->call->start_batch([
- OP_SEND_INITIAL_METADATA => $metadata,
- OP_RECV_INITIAL_METADATA => true]);
- $this->metadata = $event->metadata;
+ $this->call->start_batch([OP_SEND_INITIAL_METADATA => $metadata]);
}
/**
@@ -54,7 +51,14 @@ class BidiStreamingCall extends AbstractCall {
* @return The next value from the server, or null if there is none
*/
public function read() {
- $read_event = $this->call->start_batch([OP_RECV_MESSAGE => true]);
+ $batch = [OP_RECV_MESSAGE => true];
+ if ($this->metadata === null) {
+ $batch[OP_RECV_INITIAL_METADATA] = true;
+ }
+ $read_event = $this->call->start_batch($batch);
+ if ($this->metadata === null) {
+ $this->metadata = $read_event->metadata;
+ }
return $this->deserializeResponse($read_event->message);
}
diff --git a/src/php/lib/Grpc/ClientStreamingCall.php b/src/php/lib/Grpc/ClientStreamingCall.php
index fa29037b42..ec585da985 100644
--- a/src/php/lib/Grpc/ClientStreamingCall.php
+++ b/src/php/lib/Grpc/ClientStreamingCall.php
@@ -44,10 +44,7 @@ class ClientStreamingCall extends AbstractCall {
* @param array $metadata Metadata to send with the call, if applicable
*/
public function start($arg_iter, $metadata = array()) {
- $event = $this->call->start_batch([
- OP_SEND_INITIAL_METADATA => $metadata,
- OP_RECV_INITIAL_METADATA => true]);
- $this->metadata = $event->metadata;
+ $event = $this->call->start_batch([OP_SEND_INITIAL_METADATA => $metadata]);
foreach($arg_iter as $arg) {
$this->call->start_batch([OP_SEND_MESSAGE => $arg->serialize()]);
}
@@ -60,8 +57,10 @@ class ClientStreamingCall extends AbstractCall {
*/
public function wait() {
$event = $this->call->start_batch([
+ OP_RECV_INITIAL_METADATA => true,
OP_RECV_MESSAGE => true,
OP_RECV_STATUS_ON_CLIENT => true]);
+ $this->metadata = $event->metadata;
return array($this->deserializeResponse($event->message), $event->status);
}
} \ No newline at end of file