Overview

Namespaces

  • Grpc

Classes

  • Grpc\AbstractCall
  • Grpc\BaseStub
  • Grpc\BidiStreamingCall
  • Grpc\ClientStreamingCall
  • Grpc\ServerStreamingCall
  • Grpc\UnaryCall
  • Overview
  • Namespace
  • Class
 1: <?php
 2: /*
 3:  *
 4:  * Copyright 2015, Google Inc.
 5:  * All rights reserved.
 6:  *
 7:  * Redistribution and use in source and binary forms, with or without
 8:  * modification, are permitted provided that the following conditions are
 9:  * met:
10:  *
11:  *     * Redistributions of source code must retain the above copyright
12:  * notice, this list of conditions and the following disclaimer.
13:  *     * Redistributions in binary form must reproduce the above
14:  * copyright notice, this list of conditions and the following disclaimer
15:  * in the documentation and/or other materials provided with the
16:  * distribution.
17:  *     * Neither the name of Google Inc. nor the names of its
18:  * contributors may be used to endorse or promote products derived from
19:  * this software without specific prior written permission.
20:  *
21:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22:  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23:  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24:  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25:  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27:  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31:  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32:  *
33:  */
34: 
35: namespace Grpc;
36: 
37: /**
38:  * Represents an active call that sends a stream of messages and then gets
39:  * a single response.
40:  */
41: class ClientStreamingCall extends AbstractCall
42: {
43:     /**
44:      * Start the call.
45:      *
46:      * @param array $metadata Metadata to send with the call, if applicable
47:      *                        (optional)
48:      */
49:     public function start(array $metadata = [])
50:     {
51:         $this->call->startBatch([
52:             OP_SEND_INITIAL_METADATA => $metadata,
53:         ]);
54:     }
55: 
56:     /**
57:      * Write a single message to the server. This cannot be called after
58:      * wait is called.
59:      *
60:      * @param ByteBuffer $data    The data to write
61:      * @param array      $options An array of options, possible keys:
62:      *                            'flags' => a number (optional)
63:      */
64:     public function write($data, array $options = [])
65:     {
66:         $message_array = ['message' => $this->_serializeMessage($data)];
67:         if (array_key_exists('flags', $options)) {
68:             $message_array['flags'] = $options['flags'];
69:         }
70:         $this->call->startBatch([
71:             OP_SEND_MESSAGE => $message_array,
72:         ]);
73:     }
74: 
75:     /**
76:      * Wait for the server to respond with data and a status.
77:      *
78:      * @return array [response data, status]
79:      */
80:     public function wait()
81:     {
82:         $event = $this->call->startBatch([
83:             OP_SEND_CLOSE_FROM_CLIENT => true,
84:             OP_RECV_INITIAL_METADATA => true,
85:             OP_RECV_MESSAGE => true,
86:             OP_RECV_STATUS_ON_CLIENT => true,
87:         ]);
88:         $this->metadata = $event->metadata;
89: 
90:         $status = $event->status;
91:         $this->trailing_metadata = $status->metadata;
92: 
93:         return [$this->_deserializeResponse($event->message), $status];
94:     }
95: }
96: 
API documentation generated by ApiGen