서비스를 등록하는 과정은 다음과 같습니다.
- ACE_Service_Object 파생 클래스를 만들어줍니다.
- ACE_FACTORY_DEFINE 매크로 생성 함수와 소멸 함수를 정의한다.(dll의 경우엔 dll export 관련 #define 구문 필요)
- ACE_STATIC_SVC_DEFINE 매크로 서비스 등록 디스크립터 변수를 선언한다.
- ACE_STATIC_SVC_REQUIRE 매크로로 디스크립터 변수를 서비스에 등록한다.
*_DEFINE 매크로 구문들은 함수 정의부와 함께 구현부까지 존재합니다. 따라서 헤더 파일에 사용할때는 함수 원형이나 extern 변수 상태로 선언해야 합니다. _DEFINE 구문으로 단순히 _DECLARE로 변경해주면 됩니다.
- ACE_FACTORY_DECLARE
- ACE_STATIC_SVC_DECLARE 또는 ACE_STATIC_SVC_DECLARE_EXPORT
//
#include "stdafx.h"
#include <ace/ACE.h>
#include <ace/Service_Config.h>
#include <ace/Reactor.h>
#include <ace/Service_Manager.h>
#include <ace/Naming_Context.h>
//ACE_FACTORY_DEFINE( ACE_Local_Service, ACE_Service_Manager);
ACE_STATIC_SVC_DEFINE( Service_Manager,
"MyService",
ACE_SVC_OBJ_T,
& ACE_SVC_NAME(ACE_Service_Manager),
ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ,
0);
ACE_STATIC_SVC_REQUIRE( Service_Manager );
#include <ace/Logging_Strategy.h>
ACE_STATIC_SVC_REQUIRE(ACE_Logging_Strategy);
int main(int argc, char* argv[])
{
ACE::init();
ACE_STATIC_SVC_REGISTER( Service_Manager );
ACE_Service_Config::open( argc, argv,ACE_DEFAULT_LOGGER_KEY,false ); //svc.conf
ACE_Reactor::instance() ->run_reactor_event_loop();
ACE::fini();
return 0;
}
svc.conf 파일 정보
dynamic EchoService1 Service_Object * EchoService:_make_ES() “-a 192.168.0.2:1500″
dynamic EchoService2 Service_Object * EchoService:_make_ES() “-a 192.168.0.2:2500″
dynamic Commander Service_Object * Commander:_make_ES() “-a 192.168.0.2:3000″
static MyService “-p 1000″
static Logging_Strategy “-s log.txt”