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.
pull/12188/head
Michael Bausor 8 years ago
parent 023bb45a24
commit 81fd629092
  1. 28
      src/php/lib/Grpc/ServerStreamingCall.php
  2. 25
      src/php/lib/Grpc/UnaryCall.php

@ -40,13 +40,11 @@ class ServerStreamingCall extends AbstractCall
if (array_key_exists('flags', $options)) { if (array_key_exists('flags', $options)) {
$message_array['flags'] = $options['flags']; $message_array['flags'] = $options['flags'];
} }
$event = $this->call->startBatch([ $this->call->startBatch([
OP_SEND_INITIAL_METADATA => $metadata, OP_SEND_INITIAL_METADATA => $metadata,
OP_RECV_INITIAL_METADATA => true,
OP_SEND_MESSAGE => $message_array, OP_SEND_MESSAGE => $message_array,
OP_SEND_CLOSE_FROM_CLIENT => true, OP_SEND_CLOSE_FROM_CLIENT => true,
]); ]);
$this->metadata = $event->metadata;
} }
/** /**
@ -54,9 +52,15 @@ class ServerStreamingCall extends AbstractCall
*/ */
public function responses() public function responses()
{ {
$response = $this->call->startBatch([ $batch = [OP_RECV_MESSAGE => true];
OP_RECV_MESSAGE => true, if ($this->metadata === null) {
])->message; $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) { while ($response !== null) {
yield $this->_deserializeResponse($response); yield $this->_deserializeResponse($response);
$response = $this->call->startBatch([ $response = $this->call->startBatch([
@ -81,4 +85,16 @@ class ServerStreamingCall extends AbstractCall
return $status_event->status; 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;
}
} }

@ -42,7 +42,6 @@ class UnaryCall extends AbstractCall
} }
$event = $this->call->startBatch([ $event = $this->call->startBatch([
OP_SEND_INITIAL_METADATA => $metadata, OP_SEND_INITIAL_METADATA => $metadata,
OP_RECV_INITIAL_METADATA => true,
OP_SEND_MESSAGE => $message_array, OP_SEND_MESSAGE => $message_array,
OP_SEND_CLOSE_FROM_CLIENT => true, OP_SEND_CLOSE_FROM_CLIENT => true,
]); ]);
@ -56,14 +55,32 @@ class UnaryCall extends AbstractCall
*/ */
public function wait() public function wait()
{ {
$event = $this->call->startBatch([ $batch = [
OP_RECV_MESSAGE => true, OP_RECV_MESSAGE => true,
OP_RECV_STATUS_ON_CLIENT => 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; $status = $event->status;
$this->trailing_metadata = $status->metadata; $this->trailing_metadata = $status->metadata;
return [$this->_deserializeResponse($event->message), $status]; 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;
}
} }

Loading…
Cancel
Save