Merge pull request #12188 from michaelbausor/add-async-support

PHP: Move OP_RECV_INITIAL_METADATA out of start() methods
pull/12217/merge
Stanley Cheung 8 years ago committed by GitHub
commit 106d175c8c
  1. 28
      src/php/lib/Grpc/ServerStreamingCall.php
  2. 28
      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;
}
} }

@ -40,13 +40,11 @@ class UnaryCall extends AbstractCall
if (isset($options['flags'])) { if (isset($options['flags'])) {
$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;
} }
/** /**
@ -56,14 +54,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