服务组件
 
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);