xref: /aosp_15_r20/external/grpc-grpc/src/php/lib/Grpc/AbstractCall.php (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker<?php
2*cc02d7e2SAndroid Build Coastguard Worker/*
3*cc02d7e2SAndroid Build Coastguard Worker *
4*cc02d7e2SAndroid Build Coastguard Worker * Copyright 2015 gRPC authors.
5*cc02d7e2SAndroid Build Coastguard Worker *
6*cc02d7e2SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
7*cc02d7e2SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
8*cc02d7e2SAndroid Build Coastguard Worker * You may obtain a copy of the License at
9*cc02d7e2SAndroid Build Coastguard Worker *
10*cc02d7e2SAndroid Build Coastguard Worker *     http://www.apache.org/licenses/LICENSE-2.0
11*cc02d7e2SAndroid Build Coastguard Worker *
12*cc02d7e2SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
13*cc02d7e2SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
14*cc02d7e2SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15*cc02d7e2SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
16*cc02d7e2SAndroid Build Coastguard Worker * limitations under the License.
17*cc02d7e2SAndroid Build Coastguard Worker *
18*cc02d7e2SAndroid Build Coastguard Worker */
19*cc02d7e2SAndroid Build Coastguard Worker
20*cc02d7e2SAndroid Build Coastguard Workernamespace Grpc;
21*cc02d7e2SAndroid Build Coastguard Worker
22*cc02d7e2SAndroid Build Coastguard Worker/**
23*cc02d7e2SAndroid Build Coastguard Worker * Class AbstractCall.
24*cc02d7e2SAndroid Build Coastguard Worker * @package Grpc
25*cc02d7e2SAndroid Build Coastguard Worker */
26*cc02d7e2SAndroid Build Coastguard Workerabstract class AbstractCall
27*cc02d7e2SAndroid Build Coastguard Worker{
28*cc02d7e2SAndroid Build Coastguard Worker    /**
29*cc02d7e2SAndroid Build Coastguard Worker     * @var Call
30*cc02d7e2SAndroid Build Coastguard Worker     */
31*cc02d7e2SAndroid Build Coastguard Worker    protected $call;
32*cc02d7e2SAndroid Build Coastguard Worker    protected $deserialize;
33*cc02d7e2SAndroid Build Coastguard Worker    protected $metadata;
34*cc02d7e2SAndroid Build Coastguard Worker    protected $trailing_metadata;
35*cc02d7e2SAndroid Build Coastguard Worker
36*cc02d7e2SAndroid Build Coastguard Worker    /**
37*cc02d7e2SAndroid Build Coastguard Worker     * Create a new Call wrapper object.
38*cc02d7e2SAndroid Build Coastguard Worker     *
39*cc02d7e2SAndroid Build Coastguard Worker     * @param Channel  $channel     The channel to communicate on
40*cc02d7e2SAndroid Build Coastguard Worker     * @param string   $method      The method to call on the
41*cc02d7e2SAndroid Build Coastguard Worker     *                              remote server
42*cc02d7e2SAndroid Build Coastguard Worker     * @param callback $deserialize A callback function to deserialize
43*cc02d7e2SAndroid Build Coastguard Worker     *                              the response
44*cc02d7e2SAndroid Build Coastguard Worker     * @param array    $options     Call options (optional)
45*cc02d7e2SAndroid Build Coastguard Worker     */
46*cc02d7e2SAndroid Build Coastguard Worker    public function __construct(Channel $channel,
47*cc02d7e2SAndroid Build Coastguard Worker                                $method,
48*cc02d7e2SAndroid Build Coastguard Worker                                $deserialize,
49*cc02d7e2SAndroid Build Coastguard Worker                                array $options = [])
50*cc02d7e2SAndroid Build Coastguard Worker    {
51*cc02d7e2SAndroid Build Coastguard Worker        if (array_key_exists('timeout', $options) &&
52*cc02d7e2SAndroid Build Coastguard Worker            is_numeric($timeout = $options['timeout'])
53*cc02d7e2SAndroid Build Coastguard Worker        ) {
54*cc02d7e2SAndroid Build Coastguard Worker            $now = Timeval::now();
55*cc02d7e2SAndroid Build Coastguard Worker            $delta = new Timeval($timeout);
56*cc02d7e2SAndroid Build Coastguard Worker            $deadline = $now->add($delta);
57*cc02d7e2SAndroid Build Coastguard Worker        } else {
58*cc02d7e2SAndroid Build Coastguard Worker            $deadline = Timeval::infFuture();
59*cc02d7e2SAndroid Build Coastguard Worker        }
60*cc02d7e2SAndroid Build Coastguard Worker        $this->call = new Call($channel, $method, $deadline);
61*cc02d7e2SAndroid Build Coastguard Worker        $this->deserialize = $deserialize;
62*cc02d7e2SAndroid Build Coastguard Worker        $this->metadata = null;
63*cc02d7e2SAndroid Build Coastguard Worker        $this->trailing_metadata = null;
64*cc02d7e2SAndroid Build Coastguard Worker        if (array_key_exists('call_credentials_callback', $options) &&
65*cc02d7e2SAndroid Build Coastguard Worker            is_callable($call_credentials_callback =
66*cc02d7e2SAndroid Build Coastguard Worker                $options['call_credentials_callback'])
67*cc02d7e2SAndroid Build Coastguard Worker        ) {
68*cc02d7e2SAndroid Build Coastguard Worker            $call_credentials = CallCredentials::createFromPlugin(
69*cc02d7e2SAndroid Build Coastguard Worker                $call_credentials_callback
70*cc02d7e2SAndroid Build Coastguard Worker            );
71*cc02d7e2SAndroid Build Coastguard Worker            $this->call->setCredentials($call_credentials);
72*cc02d7e2SAndroid Build Coastguard Worker        }
73*cc02d7e2SAndroid Build Coastguard Worker    }
74*cc02d7e2SAndroid Build Coastguard Worker
75*cc02d7e2SAndroid Build Coastguard Worker    /**
76*cc02d7e2SAndroid Build Coastguard Worker     * @return mixed The metadata sent by the server
77*cc02d7e2SAndroid Build Coastguard Worker     */
78*cc02d7e2SAndroid Build Coastguard Worker    public function getMetadata()
79*cc02d7e2SAndroid Build Coastguard Worker    {
80*cc02d7e2SAndroid Build Coastguard Worker        return $this->metadata;
81*cc02d7e2SAndroid Build Coastguard Worker    }
82*cc02d7e2SAndroid Build Coastguard Worker
83*cc02d7e2SAndroid Build Coastguard Worker    /**
84*cc02d7e2SAndroid Build Coastguard Worker     * @return mixed The trailing metadata sent by the server
85*cc02d7e2SAndroid Build Coastguard Worker     */
86*cc02d7e2SAndroid Build Coastguard Worker    public function getTrailingMetadata()
87*cc02d7e2SAndroid Build Coastguard Worker    {
88*cc02d7e2SAndroid Build Coastguard Worker        return $this->trailing_metadata;
89*cc02d7e2SAndroid Build Coastguard Worker    }
90*cc02d7e2SAndroid Build Coastguard Worker
91*cc02d7e2SAndroid Build Coastguard Worker    /**
92*cc02d7e2SAndroid Build Coastguard Worker     * @return string The URI of the endpoint
93*cc02d7e2SAndroid Build Coastguard Worker     */
94*cc02d7e2SAndroid Build Coastguard Worker    public function getPeer()
95*cc02d7e2SAndroid Build Coastguard Worker    {
96*cc02d7e2SAndroid Build Coastguard Worker        return $this->call->getPeer();
97*cc02d7e2SAndroid Build Coastguard Worker    }
98*cc02d7e2SAndroid Build Coastguard Worker
99*cc02d7e2SAndroid Build Coastguard Worker    /**
100*cc02d7e2SAndroid Build Coastguard Worker     * Cancels the call.
101*cc02d7e2SAndroid Build Coastguard Worker     */
102*cc02d7e2SAndroid Build Coastguard Worker    public function cancel()
103*cc02d7e2SAndroid Build Coastguard Worker    {
104*cc02d7e2SAndroid Build Coastguard Worker        $this->call->cancel();
105*cc02d7e2SAndroid Build Coastguard Worker    }
106*cc02d7e2SAndroid Build Coastguard Worker
107*cc02d7e2SAndroid Build Coastguard Worker    /**
108*cc02d7e2SAndroid Build Coastguard Worker     * Serialize a message to the protobuf binary format.
109*cc02d7e2SAndroid Build Coastguard Worker     *
110*cc02d7e2SAndroid Build Coastguard Worker     * @param mixed $data The Protobuf message
111*cc02d7e2SAndroid Build Coastguard Worker     *
112*cc02d7e2SAndroid Build Coastguard Worker     * @return string The protobuf binary format
113*cc02d7e2SAndroid Build Coastguard Worker     */
114*cc02d7e2SAndroid Build Coastguard Worker    protected function _serializeMessage($data)
115*cc02d7e2SAndroid Build Coastguard Worker    {
116*cc02d7e2SAndroid Build Coastguard Worker        // Proto3 implementation
117*cc02d7e2SAndroid Build Coastguard Worker        return $data->serializeToString();
118*cc02d7e2SAndroid Build Coastguard Worker    }
119*cc02d7e2SAndroid Build Coastguard Worker
120*cc02d7e2SAndroid Build Coastguard Worker    /**
121*cc02d7e2SAndroid Build Coastguard Worker     * Deserialize a response value to an object.
122*cc02d7e2SAndroid Build Coastguard Worker     *
123*cc02d7e2SAndroid Build Coastguard Worker     * @param string $value The binary value to deserialize
124*cc02d7e2SAndroid Build Coastguard Worker     *
125*cc02d7e2SAndroid Build Coastguard Worker     * @return mixed The deserialized value
126*cc02d7e2SAndroid Build Coastguard Worker     */
127*cc02d7e2SAndroid Build Coastguard Worker    protected function _deserializeResponse($value)
128*cc02d7e2SAndroid Build Coastguard Worker    {
129*cc02d7e2SAndroid Build Coastguard Worker        if ($value === null) {
130*cc02d7e2SAndroid Build Coastguard Worker            return;
131*cc02d7e2SAndroid Build Coastguard Worker        }
132*cc02d7e2SAndroid Build Coastguard Worker        list($className, $deserializeFunc) = $this->deserialize;
133*cc02d7e2SAndroid Build Coastguard Worker        $obj = new $className();
134*cc02d7e2SAndroid Build Coastguard Worker        $obj->mergeFromString($value);
135*cc02d7e2SAndroid Build Coastguard Worker        return $obj;
136*cc02d7e2SAndroid Build Coastguard Worker    }
137*cc02d7e2SAndroid Build Coastguard Worker
138*cc02d7e2SAndroid Build Coastguard Worker    /**
139*cc02d7e2SAndroid Build Coastguard Worker     * Set the CallCredentials for the underlying Call.
140*cc02d7e2SAndroid Build Coastguard Worker     *
141*cc02d7e2SAndroid Build Coastguard Worker     * @param CallCredentials $call_credentials The CallCredentials object
142*cc02d7e2SAndroid Build Coastguard Worker     */
143*cc02d7e2SAndroid Build Coastguard Worker    public function setCallCredentials($call_credentials)
144*cc02d7e2SAndroid Build Coastguard Worker    {
145*cc02d7e2SAndroid Build Coastguard Worker        $this->call->setCredentials($call_credentials);
146*cc02d7e2SAndroid Build Coastguard Worker    }
147*cc02d7e2SAndroid Build Coastguard Worker}
148