服务组件
asio中的服务抽象为io_service::service
shutdown_service
为虚方法
next_表示下一个服务,主要用于服务的管理,通过将所有的服务连接起来构成一个链表
key的定义为
struct key
{
key() : type_info_(0), id_(0) {}
const std::type_info* type_info_;
const boost::asio::io_service::id* id_;
} key_;
key用于区分服务,有两种使用方式,一种是使用service::id,一种是使用type_info
#if !defined(BOOST_ASIO_NO_TYPEID)
template <typename Service>
void service_registry::init_key(boost::asio::io_service::service::key& key,
const boost::asio::detail::service_id<Service>& )
{
key.type_info_ = &typeid(typeid_wrapper<Service>);
key.id_ = 0;
}
#endif
void service_registry::init_key(boost::asio::io_service::service::key& key,
const boost::asio::io_service::id& id)
{
key.type_info_ = 0;
key.id_ = &id;
}
服务标识
通过id来区分不同的服务
通过类模板来区分不同的服务类型
带有标识的服务
通过类模板service_base
来表示带有标识的服务,包含静态类型service_id
的成员
服务管理
service_registry
用于注册管理服务
first_service()
:返回服务链表中的第一个服务
use_service()
:如果链表中有对应的服务则直接使用,没有就添加到链表中
add_service(Service* new_service)
:链表中有则抛出异常,否则添加到链表中
has_service()
:链表中是否有服务
服务相关函数模板
template <typename Service> Service& use_service(io_service& ios);
template <typename Service> void add_service(io_service& ios, Service* svc);
template <typename Service> bool has_service(io_service& ios);