Updated ActiveCall.php to use batch API

pull/1014/head
murgatroid99 10 years ago
parent 1b027f5598
commit 3f10160769
  1. 31
      src/php/lib/Grpc/ActiveCall.php

@ -38,9 +38,7 @@ require_once realpath(dirname(__FILE__) . '/../autoload.php');
* Represents an active call that allows sending and recieving binary data * Represents an active call that allows sending and recieving binary data
*/ */
class ActiveCall { class ActiveCall {
private $completion_queue;
private $call; private $call;
private $flags;
private $metadata; private $metadata;
/** /**
@ -48,24 +46,15 @@ class ActiveCall {
* @param Channel $channel The channel to communicate on * @param Channel $channel The channel to communicate on
* @param string $method The method to call on the remote server * @param string $method The method to call on the remote server
* @param array $metadata Metadata to send with the call, if applicable * @param array $metadata Metadata to send with the call, if applicable
* @param long $flags Write flags to use with this call
*/ */
public function __construct(Channel $channel, public function __construct(Channel $channel,
$method, $method,
$metadata = array(), $metadata = array()) {
$flags = 0) {
$this->completion_queue = new CompletionQueue();
$this->call = new Call($channel, $method, Timeval::inf_future()); $this->call = new Call($channel, $method, Timeval::inf_future());
$this->call->add_metadata($metadata, 0);
$this->flags = $flags;
// Invoke the call. $event = $this->call->start_batch([OP_SEND_INITIAL_METADATA => $metadata]);
$this->call->invoke($this->completion_queue,
CLIENT_METADATA_READ, $this->metadata = $event->metadata;
FINISHED, 0);
$metadata_event = $this->completion_queue->pluck(CLIENT_METADATA_READ,
Timeval::inf_future());
$this->metadata = $metadata_event->data;
} }
/** /**
@ -87,8 +76,7 @@ class ActiveCall {
* @return The next message from the server, or null if there is none. * @return The next message from the server, or null if there is none.
*/ */
public function read() { public function read() {
$this->call->start_read(READ); $read_event = $this->call->start_batch([OP_RECV_MESSAGE => true]);
$read_event = $this->completion_queue->pluck(READ, Timeval::inf_future());
return $read_event->data; return $read_event->data;
} }
@ -98,16 +86,14 @@ class ActiveCall {
* @param ByteBuffer $data The data to write * @param ByteBuffer $data The data to write
*/ */
public function write($data) { public function write($data) {
$this->call->start_write($data, WRITE_ACCEPTED, $this->flags); $this->call->start_batch([OP_SEND_MESSAGE => $data]);
$this->completion_queue->pluck(WRITE_ACCEPTED, Timeval::inf_future());
} }
/** /**
* Indicate that no more writes will be sent. * Indicate that no more writes will be sent.
*/ */
public function writesDone() { public function writesDone() {
$this->call->writes_done(FINISH_ACCEPTED); $this->call->start_batch([OP_SEND_CLOSE_FROM_CLIENT => true]);
$this->completion_queue->pluck(FINISH_ACCEPTED, Timeval::inf_future());
} }
/** /**
@ -116,8 +102,7 @@ class ActiveCall {
* and array $metadata members * and array $metadata members
*/ */
public function getStatus() { public function getStatus() {
$status_event = $this->completion_queue->pluck(FINISHED, $status_event = $this->call->start_batch([RECV_STATUS_ON_CLIENT => true]);
Timeval::inf_future());
return $status_event->data; return $status_event->data;
} }
} }

Loading…
Cancel
Save