aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/php/lib/Grpc/ServerStreamingCall.php
diff options
context:
space:
mode:
authorGravatar Michael Bausor <michaelbausor@google.com>2017-08-15 10:13:06 -0700
committerGravatar Michael Bausor <michaelbausor@google.com>2017-08-15 10:13:06 -0700
commit81fd629092282d202f23317bf0529ce5dc2979e4 (patch)
tree2c189d02058dffcfb9293f7d4ee7120efc307290 /src/php/lib/Grpc/ServerStreamingCall.php
parent023bb45a2476e1a51e8c83b98be94740593ee6a5 (diff)
Move OP_RECV_INITIAL_METADATA out of start() methods
Moves the OP_RECV_INITIAL_METADATA out of the start() methods for UnaryCall and ServerStreamingCall, and adds a check so that the getMetadata methods for those objects will always contain the metadata.
Diffstat (limited to 'src/php/lib/Grpc/ServerStreamingCall.php')
-rw-r--r--src/php/lib/Grpc/ServerStreamingCall.php28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/php/lib/Grpc/ServerStreamingCall.php b/src/php/lib/Grpc/ServerStreamingCall.php
index 269a99ab59..f8fddfea01 100644
--- a/src/php/lib/Grpc/ServerStreamingCall.php
+++ b/src/php/lib/Grpc/ServerStreamingCall.php
@@ -40,13 +40,11 @@ class ServerStreamingCall extends AbstractCall
if (array_key_exists('flags', $options)) {
$message_array['flags'] = $options['flags'];
}
- $event = $this->call->startBatch([
+ $this->call->startBatch([
OP_SEND_INITIAL_METADATA => $metadata,
- OP_RECV_INITIAL_METADATA => true,
OP_SEND_MESSAGE => $message_array,
OP_SEND_CLOSE_FROM_CLIENT => true,
]);
- $this->metadata = $event->metadata;
}
/**
@@ -54,9 +52,15 @@ class ServerStreamingCall extends AbstractCall
*/
public function responses()
{
- $response = $this->call->startBatch([
- OP_RECV_MESSAGE => true,
- ])->message;
+ $batch = [OP_RECV_MESSAGE => true];
+ if ($this->metadata === null) {
+ $batch[OP_RECV_INITIAL_METADATA] = true;
+ }
+ $read_event = $this->call->startBatch($batch);
+ if ($this->metadata === null) {
+ $this->metadata = $read_event->metadata;
+ }
+ $response = $read_event->message;
while ($response !== null) {
yield $this->_deserializeResponse($response);
$response = $this->call->startBatch([
@@ -81,4 +85,16 @@ class ServerStreamingCall extends AbstractCall
return $status_event->status;
}
+
+ /**
+ * @return mixed The metadata sent by the server
+ */
+ public function getMetadata()
+ {
+ if ($this->metadata === null) {
+ $event = $this->call->startBatch([OP_RECV_INITIAL_METADATA => true]);
+ $this->metadata = $event->metadata;
+ }
+ return $this->metadata;
+ }
}