ACE Service Configurator 框架(ACE Service Configurator Framework)
需要的灵活性:在运行时对你的应用进行不同的配置,从而使用不同的服务。
ACE Service Configurator 框架是Component Configurator 模式的一种实现。 配置静态服务 静态服务是代码已经链接进可执行程序的服务。 核心: 1.你的服务类必须是 ACE_Service_Object 的之类。 2.每个服务都需要实现以下挂钩方法: virtual int init (int argc, ACE_TCHAR *argv[]), 框架会在这个服务的实例进行初始化时调用这个方法。 virtual int fini (void), 框架会在服务实例关闭时调用这个方法。 virtual int info (ACE_TCHAR **str, size_t len), 可选,服务用这个方法类报告关于自身的信息。 ACE把已知的、可配置的静态服务放在一个内部仓库中。每个静态服务都必须用ACE提供一些宏把一些薄记信息插入这个仓库。被放在服务的.cpp文件中。 初始化服务3步曲 ACE_FACTORY_DEFINE(CLS,SERVICE_CLASS) 帮助创建和销毁对象 CLS:你的程序/库用来导入/导出声明的标识符,若不需导出到DLL,可使用 ACE_Local_Service SERVICE_CLASS:从 ACE_Service_Object派生的类的名称,会在服务初始化时被实例化。 ACE_STATIC_SVC_DEFINE(SERVICE_VAR,NAME,TYPE,FACTORY,FLAGS,ACTIVE) 向仓库登记服务所需全部信息 SERVICE_VAR:创建的静态对象的名称 NAME:一个文本串。在服务配置文件中将使用该名称来标识这个服务。不应包含空格。 TYPE:正在登记的对象类型。 ACE_SVC_OBJ_T。 FACTORY:一个指针,指向用于创建服务对象实例的工厂函数。一般用 ACE_SVC_NAME (SERVICE_CLASS)来产生。 FLAGS:指定在服务关闭时,怎样处置与服务相关的对象。使用 常用ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ ACTIVE:1表示在程序启动后激活。0表示会根据配置文件中的指令进行初始化。 ACE_STATIC_SVC_REQUIRE(SERVICE_VAR) 确保在你的程序启动时创建你的服务对象的一个实例,并向框架登记它。 SERVICE_VAR:创建的静态对象的名称 静态服务的配置行的格式: static service-name [arguments] 启动服务 ACE_STATIC_SVC_REGISTER(HA_Status_Descriptor);//HA_Status_Descriptor为创建静态对象名称 ACE_Service_Config::open (argc, argv, ACE_DEFAULT_LOGGER_KEY, 0); ACE_Service_Config::open()默认情况下会尝试处理当前目录中名为svc.conf的文件。 设置动态服务 动态服务可以从共享库(DLL)中动态加载。 与静态服务的过程区别: 1)动态的服务类将驻留在共享库(DLL)中,所以声明服务类时( ACE_Service_Object派生的类 )必须使用适当的导出声明。 2)只需要的宏: ACE_FACTORY_DEFINE |