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