Bladeren bron

Merge pull request #12239 from michaelbausor/v1.4.x

PHP: Backport of #12188 into 1.4.x
Stanley Cheung 8 jaren geleden
bovenliggende
commit
f135a77fe1
2 gewijzigde bestanden met toevoegingen van 44 en 12 verwijderingen
  1. 22 6
      src/php/lib/Grpc/ServerStreamingCall.php
  2. 22 6
      src/php/lib/Grpc/UnaryCall.php

+ 22 - 6
src/php/lib/Grpc/ServerStreamingCall.php

@@ -55,13 +55,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;
     }
 
     /**
@@ -69,9 +67,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([
@@ -96,4 +100,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;
+    }
 }

+ 22 - 6
src/php/lib/Grpc/UnaryCall.php

@@ -55,13 +55,11 @@ class UnaryCall extends AbstractCall
         if (isset($options['flags'])) {
             $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;
     }
 
     /**
@@ -71,14 +69,32 @@ class UnaryCall extends AbstractCall
      */
     public function wait()
     {
-        $event = $this->call->startBatch([
+        $batch = [
             OP_RECV_MESSAGE => true,
             OP_RECV_STATUS_ON_CLIENT => true,
-        ]);
-
+        ];
+        if ($this->metadata === null) {
+            $batch[OP_RECV_INITIAL_METADATA] = true;
+        }
+        $event = $this->call->startBatch($batch);
+        if ($this->metadata === null) {
+            $this->metadata = $event->metadata;
+        }
         $status = $event->status;
         $this->trailing_metadata = $status->metadata;
 
         return [$this->_deserializeResponse($event->message), $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;
+    }
 }