1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- // Licensed to the Apache Software Foundation (ASF) under one
- // or more contributor license agreements. See the NOTICE file
- // distributed with this work for additional information
- // regarding copyright ownership. The ASF licenses this file
- // to you under the Apache License, Version 2.0 (the
- // "License"); you may not use this file except in compliance
- // with the License. You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing,
- // software distributed under the License is distributed on an
- // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- // KIND, either express or implied. See the License for the
- // specific language governing permissions and limitations
- // under the License.
- #ifndef BRPC_NSHEAD_PB_SERVICE_ADAPTOR_H
- #define BRPC_NSHEAD_PB_SERVICE_ADAPTOR_H
- #include "brpc/nshead_service.h" // NsheadService
- #include "brpc/nshead_meta.pb.h" // NsheadMeta
- namespace brpc {
- class NsheadPbServiceAdaptor;
- extern const size_t SendNsheadPbResponseSize;
- // Adapt nshead requests to use protobuf-based service.
- // What RPC does:
- // * Call ParseNsheadMeta() to understand the nshead header, user must
- // tell RPC which pb method to call in the callback.
- // * Call ParseRequestFromIOBuf() to convert the body after nshead header
- // to pb request, then call the pb method.
- // * When user calls server's done to end the RPC, SerializeResponseToIOBuf()
- // is called to convert pb response to binary data that will be appended
- // after nshead header and sent back to client.
- class NsheadPbServiceAdaptor : public NsheadService {
- public:
- NsheadPbServiceAdaptor() : NsheadService(
- NsheadServiceOptions(false, SendNsheadPbResponseSize)) {}
- virtual ~NsheadPbServiceAdaptor() {}
- // Fetch meta from `nshead_req' into `meta'.
- // Params:
- // server: where the RPC runs.
- // nshead_req: the nshead request that server received.
- // controller: If something goes wrong, call controller->SetFailed()
- // meta: Set meta information into this structure. `full_method_name'
- // must be set if controller is not SetFailed()-ed
- // FIXME: server is not needed anymore, controller->server() is same
- virtual void ParseNsheadMeta(const Server& server,
- const NsheadMessage& nshead_req,
- Controller* controller,
- NsheadMeta* meta) const = 0;
- // Transform `nshead_req' to `pb_req'.
- // Params:
- // meta: was set by ParseNsheadMeta()
- // nshead_req: the nshead request that server received.
- // controller: you can set attachment into the controller. If something
- // goes wrong, call controller->SetFailed()
- // pb_req: the pb request should be set by your implementation.
- virtual void ParseRequestFromIOBuf(const NsheadMeta& meta,
- const NsheadMessage& nshead_req,
- Controller* controller,
- google::protobuf::Message* pb_req) const = 0;
- // Transform `pb_res' (and controller) to `nshead_res'.
- // Params:
- // meta: was set by ParseNsheadMeta()
- // controller: If something goes wrong, call controller->SetFailed()
- // pb_res: the pb response that returned by pb method. [NOTE] `pb_res'
- // can be NULL or uninitialized when RPC failed (indicated by
- // Controller::Failed()), in which case you may put error
- // information into `nshead_res'.
- // nshead_res: the nshead response that will be sent back to client.
- virtual void SerializeResponseToIOBuf(const NsheadMeta& meta,
- Controller* controller,
- const google::protobuf::Message* pb_res,
- NsheadMessage* nshead_res) const = 0;
- private:
- void ProcessNsheadRequest(
- const Server& server, Controller* controller,
- const NsheadMessage& request, NsheadMessage* response,
- NsheadClosure* done);
- };
- } // namespace brpc
- #endif // BRPC_NSHEAD_PB_SERVICE_ADAPTOR_H
|