]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/thrift/lib/cpp/src/thrift/protocol/TMultiplexedProtocol.h
buildsys: switch source download to quincy
[ceph.git] / ceph / src / jaegertracing / thrift / lib / cpp / src / thrift / protocol / TMultiplexedProtocol.h
CommitLineData
f67539c2
TL
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20#ifndef THRIFT_TMULTIPLEXEDPROTOCOL_H_
21#define THRIFT_TMULTIPLEXEDPROTOCOL_H_ 1
22
23#include <thrift/protocol/TProtocolDecorator.h>
24
25namespace apache {
26namespace thrift {
27namespace protocol {
28using std::shared_ptr;
29
30/**
31 * <code>TMultiplexedProtocol</code> is a protocol-independent concrete decorator
32 * that allows a Thrift client to communicate with a multiplexing Thrift server,
33 * by prepending the service name to the function name during function calls.
34 *
35 * \note THIS IS NOT USED BY SERVERS. On the server, use
36 * {@link apache::thrift::TMultiplexedProcessor TMultiplexedProcessor} to handle requests
37 * from a multiplexing client.
38 *
39 * This example uses a single socket transport to invoke two services:
40 *
41 * <blockquote><code>
42 * shared_ptr<TSocket> transport(new TSocket("localhost", 9090));
43 * transport->open();
44 *
45 * shared_ptr<TBinaryProtocol> protocol(new TBinaryProtocol(transport));
46 *
47 * shared_ptr<TMultiplexedProtocol> mp1(new TMultiplexedProtocol(protocol, "Calculator"));
48 * shared_ptr<CalculatorClient> service1(new CalculatorClient(mp1));
49 *
50 * shared_ptr<TMultiplexedProtocol> mp2(new TMultiplexedProtocol(protocol, "WeatherReport"));
51 * shared_ptr<WeatherReportClient> service2(new WeatherReportClient(mp2));
52 *
53 * service1->add(2,2);
54 * int temp = service2->getTemperature();
55 * </code></blockquote>
56 *
57 * @see apache::thrift::protocol::TProtocolDecorator
58 */
59class TMultiplexedProtocol : public TProtocolDecorator {
60public:
61 /**
62 * Wrap the specified protocol, allowing it to be used to communicate with a
63 * multiplexing server. The <code>serviceName</code> is required as it is
64 * prepended to the message header so that the multiplexing server can broker
65 * the function call to the proper service.
66 *
67 * \param _protocol Your communication protocol of choice, e.g. <code>TBinaryProtocol</code>.
68 * \param _serviceName The service name of the service communicating via this protocol.
69 */
70 TMultiplexedProtocol(shared_ptr<TProtocol> _protocol, const std::string& _serviceName)
71 : TProtocolDecorator(_protocol), serviceName(_serviceName), separator(":") {}
72 ~TMultiplexedProtocol() override = default;
73
74 /**
75 * Prepends the service name to the function name, separated by TMultiplexedProtocol::SEPARATOR.
76 *
77 * \param [in] _name The name of the method to be called in the service.
78 * \param [in] _type The type of message
79 * \param [in] _name The sequential id of the message
80 *
81 * \throws TException Passed through from wrapped <code>TProtocol</code> instance.
82 */
83 uint32_t writeMessageBegin_virt(const std::string& _name,
84 const TMessageType _type,
85 const int32_t _seqid) override;
86
87private:
88 const std::string serviceName;
89 const std::string separator;
90};
91}
92}
93}
94
95#endif // THRIFT_TMULTIPLEXEDPROTOCOL_H_