cpp-msgpack-rpc
0.2.0
An RPC library implementing MessagePack RPC.
Toggle main menu visibility
Loading...
Searching...
No Matches
server_builder_impl.h
Go to the documentation of this file.
1
/*
2
* Copyright 2023 MusicScience37 (Kenta Kabashima)
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
20
#pragma once
21
22
#include <memory>
23
#include <utility>
24
#include <vector>
25
26
#include "
msgpack_rpc/addresses/uri.h
"
27
#include "
msgpack_rpc/common/msgpack_rpc_exception.h
"
28
#include "
msgpack_rpc/common/status_code.h
"
29
#include "
msgpack_rpc/executors/i_async_executor.h
"
30
#include "
msgpack_rpc/logging/logger.h
"
31
#include "
msgpack_rpc/methods/i_method.h
"
32
#include "
msgpack_rpc/methods/i_method_processor.h
"
33
#include "
msgpack_rpc/methods/method_processor.h
"
34
#include "
msgpack_rpc/servers/impl/i_server_builder_impl.h
"
35
#include "
msgpack_rpc/servers/impl/i_server_impl.h
"
36
#include "
msgpack_rpc/servers/impl/server_impl.h
"
37
#include "
msgpack_rpc/transport/backend_list.h
"
38
#include "
msgpack_rpc/transport/i_acceptor.h
"
39
#include "
msgpack_rpc/transport/i_acceptor_factory.h
"
40
#include "
msgpack_rpc/transport/i_backend.h
"
41
42
namespace
msgpack_rpc::servers::impl
{
43
47
class
ServerBuilderImpl
final :
public
IServerBuilderImpl {
48
public
:
57
ServerBuilderImpl
(std::shared_ptr<executors::IAsyncExecutor> executor,
58
std::shared_ptr<logging::Logger>
logger
,
59
transport::BackendList
backends, std::vector<addresses::URI> uris)
60
:
executor_
(
std
::move(executor)),
61
logger_
(
std
::move(
logger
)),
62
backends_
(
std
::move(backends)),
63
uris_
(
std
::move(uris)),
64
processor_
(
methods
::create_method_processor(
logger_
)) {}
65
67
void
register_protocol
(
68
std::shared_ptr<transport::IBackend> backend)
override
{
69
backends_
.
append
(backend);
70
}
71
73
void
listen_to
(
addresses::URI
uri)
override
{
74
uris_
.push_back(std::move(uri));
75
}
76
78
void
add_method
(std::unique_ptr<methods::IMethod> method)
override
{
79
processor_
->append(std::move(method));
80
}
81
83
[[nodiscard]] std::unique_ptr<IServerImpl>
build
()
override
{
84
if
(
uris_
.empty()) {
85
throw
MsgpackRPCException
(StatusCode::PRECONDITION_NOT_MET,
86
"No URI to listen to was given."
);
87
}
88
89
std::vector<std::shared_ptr<transport::IAcceptor>> acceptors;
90
for
(
const
auto
& uri :
uris_
) {
91
const
auto
backend =
backends_
.
find
(uri.scheme());
92
93
const
auto
added_acceptors =
94
backend->create_acceptor_factory()->create(uri);
95
for
(
const
auto
& acceptor : added_acceptors) {
96
acceptors.push_back(acceptor);
97
}
98
}
99
100
if
(acceptors.empty()) {
101
throw
MsgpackRPCException
(StatusCode::PRECONDITION_NOT_MET,
102
"All URI set to listen to was unusable."
);
103
}
104
105
auto
server = std::make_unique<ServerImpl>(
106
std::move(acceptors), std::move(
processor_
),
executor_
,
logger_
);
107
server->start();
108
109
return
server;
110
}
111
113
[[nodiscard]] std::shared_ptr<logging::Logger>
logger
()
override
{
114
return
logger_
;
115
}
116
117
private
:
119
std::shared_ptr<executors::IAsyncExecutor>
executor_
;
120
122
std::shared_ptr<logging::Logger>
logger_
;
123
125
transport::BackendList
backends_
{};
126
128
std::vector<addresses::URI>
uris_
{};
129
131
std::unique_ptr<methods::IMethodProcessor>
processor_
;
132
};
133
134
}
// namespace msgpack_rpc::servers::impl
backend_list.h
Definition of BackendList class.
msgpack_rpc::addresses::URI
Class of URIs (Uniform Resource Identifiers) to specify endpoints in this library.
Definition
uri.h:38
msgpack_rpc::MsgpackRPCException
Class of exceptions in cpp-msgpack-rpc library.
Definition
msgpack_rpc_exception.h:35
msgpack_rpc::servers::impl::ServerBuilderImpl::executor_
std::shared_ptr< executors::IAsyncExecutor > executor_
Executor.
Definition
server_builder_impl.h:119
msgpack_rpc::servers::impl::ServerBuilderImpl::add_method
void add_method(std::unique_ptr< methods::IMethod > method) override
Add a method.
Definition
server_builder_impl.h:78
msgpack_rpc::servers::impl::ServerBuilderImpl::ServerBuilderImpl
ServerBuilderImpl(std::shared_ptr< executors::IAsyncExecutor > executor, std::shared_ptr< logging::Logger > logger, transport::BackendList backends, std::vector< addresses::URI > uris)
Constructor.
Definition
server_builder_impl.h:57
msgpack_rpc::servers::impl::ServerBuilderImpl::logger_
std::shared_ptr< logging::Logger > logger_
Logger.
Definition
server_builder_impl.h:122
msgpack_rpc::servers::impl::ServerBuilderImpl::build
std::unique_ptr< IServerImpl > build() override
Build a server.
Definition
server_builder_impl.h:83
msgpack_rpc::servers::impl::ServerBuilderImpl::listen_to
void listen_to(addresses::URI uri) override
Add a URI to listen to.
Definition
server_builder_impl.h:73
msgpack_rpc::servers::impl::ServerBuilderImpl::register_protocol
void register_protocol(std::shared_ptr< transport::IBackend > backend) override
Register a protocol.
Definition
server_builder_impl.h:67
msgpack_rpc::servers::impl::ServerBuilderImpl::backends_
transport::BackendList backends_
Backends.
Definition
server_builder_impl.h:125
msgpack_rpc::servers::impl::ServerBuilderImpl::uris_
std::vector< addresses::URI > uris_
URIs to listen to.
Definition
server_builder_impl.h:128
msgpack_rpc::servers::impl::ServerBuilderImpl::logger
std::shared_ptr< logging::Logger > logger() override
Get the logger in this builder.
Definition
server_builder_impl.h:113
msgpack_rpc::servers::impl::ServerBuilderImpl::processor_
std::unique_ptr< methods::IMethodProcessor > processor_
Processor of methods.
Definition
server_builder_impl.h:131
msgpack_rpc::transport::BackendList
Class of lists of backends of protocols.
Definition
backend_list.h:39
msgpack_rpc::transport::BackendList::find
std::shared_ptr< transport::IBackend > find(std::string_view scheme) const
Find a backend. Throw an exception when not found.
Definition
backend_list.h:66
msgpack_rpc::transport::BackendList::append
void append(std::shared_ptr< transport::IBackend > backend)
Add a backend of the protocol.
Definition
backend_list.h:51
i_acceptor.h
Definition of IAcceptor class.
i_acceptor_factory.h
Definition of IAcceptorFactory class.
i_async_executor.h
Definition of IAsyncExecutor class.
i_backend.h
Definition of IBackend class.
i_method.h
Definition of IMethod class.
i_method_processor.h
Definition of IMethodProcessor class.
i_server_builder_impl.h
Definition of IServerBuilderImpl class.
i_server_impl.h
Definition of IServerImpl class.
logger.h
Definition of Logger class.
method_processor.h
Definition of functions for processor of method calls.
msgpack_rpc_exception.h
Definition of MsgpackRPCException class.
msgpack_rpc::methods
Namespace of methods in MessagePack-RPC.
Definition
functional_method.h:41
msgpack_rpc::servers::impl
Namespace of internal implementation.
Definition
i_server_builder_impl.h:33
std
STL namespace.
server_impl.h
Definition of ServerImpl class.
status_code.h
Definition of StatusCode enumeration.
uri.h
Definition of URI class.
src
msgpack_rpc
servers
impl
server_builder_impl.h
Generated on
for cpp-msgpack-rpc by
1.18.0