📄 clerk_i.cpp
字号:
ACE_ENDTRY;
return 0;
}
// Initialise the Naming Service.
int
Clerk_i::init_naming_service (int argc,
char* argv[])
{
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
// Initialize the POA.
this->orb_manager_.init_child_poa (argc,
argv,
"my_child_poa"
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
PortableServer::POA_ptr child_poa
= this->orb_manager_.child_poa ();
// Initialize the Naming Server. Note the Naming Server cannot
// be initialized with the Root POA because it has to be a
// persistent object reference. Hence the need for child
// POA. The servants need not be registered in the same POA. We
// use the Root POA for the servants.
if (this->my_name_server_.init (this->orb_.in (),
child_poa) == -1)
return -1;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, ACE_LIB_TEXT("Exception"));
return -1;
}
ACE_ENDTRY;
return 0;
}
// Create an instance of the clerk with appropriate parameters.
int
Clerk_i::create_clerk (void)
{
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
// Create a new clerk object. Pass it the timer value, the set
// of server IORs and the no. of servers.
ACE_NEW_RETURN (this->time_service_clerk_impl_,
TAO_Time_Service_Clerk (this->timer_value_,
this->timer_value_usecs_,
this->server_),
0);
// Generate IOR of the Clerk and register with POA.
this->time_service_clerk_ =
this->time_service_clerk_impl_->_this ();
// Convert the clerk reference to a string.
CORBA::String_var objref_clerk =
this->orb_->object_to_string (this->time_service_clerk_.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
// Print the clerk IOR on the console.
ACE_DEBUG ((LM_DEBUG,
ACE_LIB_TEXT("[SERVER] Process/Thread Id : (%P/%t) The Time Service CLERK IOR is: <%s>\n"),
ACE_TEXT_CHAR_TO_TCHAR(objref_clerk.in ())));
// Print the Time Service clerk IOR to a file.
if (this->ior_output_file_)
{
ACE_OS::fprintf (this->ior_output_file_,
"%s",
objref_clerk.in ());
ACE_OS::fclose (this->ior_output_file_);
}
// Register the clerk implementation with the Interface
// Repository. init_IR();
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, ACE_LIB_TEXT("Exception"));
return -1;
}
ACE_ENDTRY;
return 0;
}
// Check if this is the first Clerk to bind to the Naming
// Service. If yes, then 1 is returned else 0 is returned.
int
Clerk_i::if_first_clerk (CosNaming::Name clerk_context_name)
{
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
this->my_name_server_->resolve
(clerk_context_name ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCH (CORBA::UserException, userex)
{
ACE_UNUSED_ARG (userex);
return 1;
}
ACE_ENDTRY;
return 0;
}
// Binds the clerk in the context ClerkContext with the name
// Clerk:<hostname>.
int
Clerk_i::register_clerk (void)
{
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
// Bind the Clerk in its appropriate Context.
CosNaming::Name clerk_context_name;
clerk_context_name.length (1);
clerk_context_name[0].id = CORBA::string_dup ("ClerkContext");
CosNaming::NamingContext_var clerk_context;
if (if_first_clerk (clerk_context_name))
{
clerk_context = this->my_name_server_->new_context (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
this->my_name_server_->rebind_context (clerk_context_name,
clerk_context.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
char host_name[MAXHOSTNAMELEN];
char clerk_mc_name[MAXHOSTNAMELEN];
ACE_OS::hostname (host_name,
MAXHOSTNAMELEN);
//CosNaming::Name clerk_name (clerk_context_name);
CosNaming::Name clerk_name;
clerk_name.length (2);
ACE_OS::strcpy (clerk_mc_name, "Clerk:");
ACE_OS::strcat (clerk_mc_name, host_name);
clerk_name[0].id = CORBA::string_dup ("ClerkContext");
clerk_name[1].id = CORBA::string_dup (clerk_mc_name);
this->my_name_server_->rebind (clerk_name,
this->time_service_clerk_.in ()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
ACE_LIB_TEXT("(%P|%t) Exception from init_naming_service ()\n"));
}
ACE_ENDTRY;
return 0;
}
// Initialize the Clerk.
int
Clerk_i::init (int argc,
ACE_TCHAR *argv[]
ACE_ENV_ARG_DECL)
{
ACE_TRY
{
// Make a copy of command line parameter.
ACE_Argv_Type_Converter command(argc, argv);
// Set the size of the Server IOR Array.
this->server_.max_size (10);
this->server_.size (0);
// Call the init of <TAO_ORB_Manager> to initialize the ORB and
// create a child POA under the root POA.
this->orb_manager_.init (command.get_argc(),
command.get_ASCII_argv()
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
if (this->orb_manager_.init_child_poa (command.get_argc(),
command.get_ASCII_argv(),
"child_poa"
ACE_ENV_ARG_PARAMETER) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_LIB_TEXT("%p\n"),
ACE_LIB_TEXT("init_child_poa")),
-1);
ACE_TRY_CHECK;
// Get the ORB.
this->orb_ = this->orb_manager_.orb ();
// Parse commandline arguments.
if (this->parse_args (command.get_argc(), command.get_TCHAR_argv()) !=0 )
return -1;
// If IOR file has not been specified then try the Naming
// Service.
if (!this->ior_fp_)
{
ACE_DEBUG ((LM_DEBUG,
ACE_LIB_TEXT("IOR file not specified. Using the Naming Service instead\n")));
// Initialize the Naming Service.
if (this->init_naming_service (command.get_argc(),
command.get_ASCII_argv()) !=0 )
return -1;
// Get a reference to the Server Naming context and the
// first IOR.
if (this->get_first_IOR () != 0)
return -1;
}
// Create an instance of the Clerk.
if (this->create_clerk () != 0)
return -1;
// Register the clerk with the Naming Service.
if (this->ior_fp_ == 0)
{
if (this->register_clerk () != 0)
return -1;
}
// Close the open file handler.
// ACE_OS::fclose (this->ior_fp_);
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
ACE_LIB_TEXT("(%P|%t) Exception in Clerk_i::init ()\n"));
return -1;
}
ACE_ENDTRY;
return 0;
}
int
Clerk_i::run (ACE_ENV_SINGLE_ARG_DECL)
{
ACE_TRY
{
// Run the main event loop for the ORB.
int r = this->orb_manager_.run (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_TRY_CHECK;
if (r == -1)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_LIB_TEXT("[SERVER] Process/Thread Id : (%P/%t) Clerk_i::run")),
-1);
}
ACE_CATCHANY
{
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
ACE_LIB_TEXT("(%P|%t) Exception in Clerk_i::run ()\n"));
}
ACE_ENDTRY;
return 0;
}
void
Clerk_i::insert_server (CosTime::TimeService_ptr server)
{
// We duplicate the capacity of the Array.
size_t s = this->server_.size ();
if (this->server_.max_size () == s)
this->server_.max_size (2 * s);
this->server_[s] =
CosTime::TimeService::_duplicate (server);
this->server_.size (s + 1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -