⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svcconf_handler.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// Svcconf_Handler.cpp,v 1.14 2005/02/14 07:59:47 ossama Exp#include "Svcconf_Handler.h"#include "ace/ACE.h"#include "ace/Log_Msg.h"#include "ace/Service_Config.h"#include "ace/Service_Types.h"#include "ace/Service_Repository.h"#include "ace/DLL.h"#include "ace/ARGV.h"#include "ace/Module.h"#include "ace/OS_NS_strings.h"#include "ace/SString.h"#if (ACE_USES_CLASSIC_SVC_CONF == 0)#if !defined (__ACEXML_INLINE__)# include "Svcconf_Handler.i"#endif /* __ACEXML_INLINE__ */ACEXML_Svcconf_Handler::ACEXML_Svcconf_Handler (void)  : in_stream_def_ (0),    in_module_ (0),    stream_svc_type_ (0),    stream_ (0){  // no-op}ACEXML_Svcconf_Handler::~ACEXML_Svcconf_Handler (void){  // no-op}voidACEXML_Svcconf_Handler::characters (const ACEXML_Char *,                                    int,                                    int ACEXML_ENV_ARG_DECL_NOT_USED)      ACE_THROW_SPEC ((ACEXML_SAXException)){  // no-op}voidACEXML_Svcconf_Handler::endDocument ( ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED)      ACE_THROW_SPEC ((ACEXML_SAXException)){  // no-op}voidACEXML_Svcconf_Handler::endElement (const ACEXML_Char *,                                    const ACEXML_Char *,                                    const ACEXML_Char *qName ACEXML_ENV_ARG_DECL)      ACE_THROW_SPEC ((ACEXML_SAXException)){  if (ACE_OS::strcmp (qName, ACE_TEXT ("dynamic")) == 0)    {      ACE_Parsed_Info *active_info = (this->in_stream_def_ == 0 ?                                      &this->parsed_info_ :                                      &this->stream_info_);      ACE_DLL svc_dll;      if (svc_dll.open (active_info->path ()) == -1)        {          // build the error message          ACE_CString msg (ACE_TEXT ("Cannot locate DLL: '"));          msg += ACE_CString (ACE_TEXT (active_info->path ()));          msg += ACE_CString (ACE_TEXT ("' for entity '"));          msg += ACE_CString (ACE_TEXT (active_info->name ()));          msg += ACE_CString (ACE_TEXT ("'\n"));          ACEXML_THROW (ACEXML_SAXException (msg.c_str ()));        }      void *(*func) (ACE_Service_Object_Exterminator *) = 0;      ACE_Service_Object_Exterminator gobbler = 0;      void *symbol = 0;      long temp_ptr =        reinterpret_cast<long> (svc_dll.symbol (active_info->init_func ()));      func = reinterpret_cast<void *(*)(ACE_Service_Object_Exterminator *)> (temp_ptr);      if (func == 0)        {          // build the error message          ACE_CString msg (ACE_TEXT ("Cannot locate init function: '"));          msg += ACE_CString (ACE_TEXT (active_info->init_func ()));          msg += ACE_CString (ACE_TEXT ("' for entity '"));          msg += ACE_CString (ACE_TEXT (active_info->name ()));          msg += ACE_CString (ACE_TEXT ("'\n"));          ACEXML_THROW (ACEXML_SAXException (msg.c_str ()));        }      symbol = (*func)(&gobbler); // target object created in the loaded DLL.      ACE_Service_Type_Impl *stp = ACE_Service_Config::create_service_type_impl        (active_info->name (),         active_info->service_type (),         symbol,         ACE_Service_Type::DELETE_THIS |         ACE_Service_Type::DELETE_OBJ,         gobbler);      if (this->in_stream_def_)        {//           ACE_DEBUG ((LM_INFO, ACE_TEXT ("Create dynamic %s for stream\n"),//                       this->stream_info_.name ()));          if (active_info->service_type () == ACE_Service_Type::STREAM)            {              this->stream_ = (ACE_Stream_Type *) stp;            }          else            {              // build the error message              ACE_CString msg (ACE_TEXT ("Expecting Stream type in stream header"));              msg += ACE_CString (ACE_TEXT (" for entity '"));              msg += ACE_CString (ACE_TEXT (active_info->name ()));              msg += ACE_CString (ACE_TEXT ("'\n"));              ACEXML_THROW (ACEXML_SAXException (msg.c_str ()));            }          this->stream_svc_type_ =            ACE_Service_Config::create_service_type (this->stream_info_.name (),                                                     this->stream_,                                                     svc_dll,                                                     this->stream_info_.active ());        }      else        {          if (this->in_module_)            {              ACE_ARGV args (active_info->init_params ());              ACE_Module_Type *mt = (ACE_Module_Type *) stp;              ACE_Module<ACE_SYNCH> *mp = (ACE_Module<ACE_SYNCH> *) mt->object ();              if (ACE_OS::strcmp (mp->name (), active_info->name ()) != 0)                {                  ACE_DEBUG ((LM_DEBUG,                              ACE_TEXT ("warning: assigning Module_Type name %s to Module %s since names differ\n"),                              active_info->name (),                              mp->name ()));                  mp->name (active_info->name ());                }              if (mt->init (args.argc (), args.argv ()) == -1                  || this->stream_->push (mt) == -1)                {                  // build the error message                  ACE_CString msg (ACE_TEXT ("Error initializing module"));                  msg += ACE_CString (ACE_TEXT (" for entity '"));                  msg += ACE_CString (ACE_TEXT (active_info->name ()));                  msg += ACE_CString (ACE_TEXT ("'\n"));                  ACEXML_THROW (ACEXML_SAXException (msg.c_str ()));                }//               ACE_DEBUG ((LM_INFO, ACE_TEXT ("Push dynamic %s into stream %s\n"),//                           this->parsed_info_.name (),//                           this->stream_info_.name ()));            }          else            {              ACE_Service_Type *stype =                ACE_Service_Config::create_service_type (active_info->name (),                                                         stp,                                                         svc_dll,                                                         active_info->active ());              // @@ Check error here.              //               ACE_DEBUG ((LM_INFO, ACE_TEXT ("Apply dynamic %s\n"),//                           this->parsed_info_.name ()));              if (ACE_Service_Config::initialize (stype,                                                  active_info->init_params ()) == -1)                {                  // build the error message                  ACE_CString msg (ACE_TEXT ("Failed to initialize dynamic service"));                  msg += ACE_CString (ACE_TEXT (" for entity '"));                  msg += ACE_CString (ACE_TEXT (active_info->name ()));                  msg += ACE_CString (ACE_TEXT ("'\n"));                  ACEXML_THROW (ACEXML_SAXException (msg.c_str ()));                }            }          this->parsed_info_.reset ();        }    }  else if (ACE_OS::strcmp (qName, ACE_TEXT ("static")) == 0)    {      if (this->in_stream_def_)        {          // @@ Couldn't make sense out of the original Svc_Conf.y.          ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Create static %s for stream\n"),                      this->stream_info_.name ()));        }      else        {          if (this->in_module_)            {              // @@ Couldn't make sense out of the original Svc_Conf.y.              ACE_DEBUG ((LM_ERROR, ACE_TEXT ("Push static %s into stream %s\n"),                          this->parsed_info_.name (),                          this->stream_info_.name ()));            }          else            {//               ACE_DEBUG ((LM_INFO, ACE_TEXT ("Apply static %s\n"),//                           this->parsed_info_.name ()));              if (ACE_Service_Config::initialize (this->parsed_info_.name (),                                                  this->parsed_info_.init_params ()) == -1)                {                  // build the error message                  ACE_CString msg (ACE_TEXT ("Failed to initialize static service"));                  msg += ACE_CString (ACE_TEXT (" for entity '"));                  msg += ACE_CString (ACE_TEXT (this->parsed_info_.name ()));                  msg += ACE_CString (ACE_TEXT ("'\n"));                  ACEXML_THROW (ACEXML_SAXException (msg.c_str ()));                }            }          this->parsed_info_.reset ();        }    }  else if (ACE_OS::strcmp (qName, ACE_TEXT ("module")) == 0)    {      this->in_module_ = 0;    }  else if (ACE_OS::strcmp (qName, ACE_TEXT ("streamdef")) == 0)    {//       ACE_DEBUG ((LM_INFO, ACE_TEXT ("Apply stream %s of type %s\n"),//                   this->stream_info_.name (),//                   this->stream_info_.name ()));      ACE_Service_Config::initialize (this->stream_svc_type_,                                      this->stream_info_.init_params ());      this->stream_info_.reset ();      this->stream_svc_type_ = 0;      this->stream_ = 0;    }  else if (ACE_OS::strcmp (qName, ACE_TEXT ("stream")) == 0)    {//       ACE_DEBUG ((LM_INFO, ACE_TEXT ("Apply stream %s of type %s\n"),//                   this->stream_info_.name (),//                   this->stream_info_.name ()));      this->stream_info_.reset ();    }  else    {    }}voidACEXML_Svcconf_Handler::endPrefixMapping (const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED)      ACE_THROW_SPEC ((ACEXML_SAXException)){  // no-op}voidACEXML_Svcconf_Handler::ignorableWhitespace (const ACEXML_Char *,                                             int,                                             int ACEXML_ENV_ARG_DECL_NOT_USED)      ACE_THROW_SPEC ((ACEXML_SAXException)){  // no-op}voidACEXML_Svcconf_Handler::processingInstruction (const ACEXML_Char *,                                               const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED)      ACE_THROW_SPEC ((ACEXML_SAXException)){  // no-op}voidACEXML_Svcconf_Handler::setDocumentLocator (ACEXML_Locator* locator){  this->locator_ = locator;}voidACEXML_Svcconf_Handler::skippedEntity (const ACEXML_Char * ACEXML_ENV_ARG_DECL_NOT_USED)      ACE_THROW_SPEC ((ACEXML_SAXException)){  // no-op}voidACEXML_Svcconf_Handler::startDocument ( ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED)      ACE_THROW_SPEC ((ACEXML_SAXException)){  // no-op}voidACEXML_Svcconf_Handler::startElement (const ACEXML_Char *,                                      const ACEXML_Char *,                                      const ACEXML_Char *qName,                                      ACEXML_Attributes *alist ACEXML_ENV_ARG_DECL)      ACE_THROW_SPEC ((ACEXML_SAXException)){  if (ACE_OS::strcmp (qName, ACE_TEXT ("dynamic")) == 0)    {      this->get_dynamic_attrs (alist ACEXML_ENV_ARG_PARAMETER);    }  else if (ACE_OS::strcmp (qName, ACE_TEXT ("initializer")) == 0)    {      this->get_initializer_attrs (alist ACEXML_ENV_ARG_PARAMETER);    }  else if (ACE_OS::strcmp (qName, ACE_TEXT ("static")) == 0)    {      this->get_static_attrs (alist ACEXML_ENV_ARG_PARAMETER);    }  else if (ACE_OS::strcmp (qName, ACE_TEXT ("stream")) == 0)    {      this->get_stream_id (alist ACEXML_ENV_ARG_PARAMETER);      if (ACE_Service_Repository::instance()->find          (this->stream_info_.name (),           (const ACE_Service_Type **) &this->stream_svc_type_) == -1)        {          // build the error message          ACE_CString msg (ACE_TEXT ("Cannot find stream '"));          msg += ACE_CString (ACE_TEXT (this->stream_info_.name ()));          msg += ACE_CString (ACE_TEXT ("'\n"));          ACEXML_THROW (ACEXML_SAXException (msg.c_str ()));        }      this->stream_ =   this->stream_svc_type_ == 0        ? 0        : dynamic_cast<ACE_Stream_Type *> (const_cast<ACE_Service_Type_Impl *> (this->stream_svc_type_->type ()));//       ACE_DEBUG ((LM_INFO, ACE_TEXT ("Retrieve stream %s from repository\n"),//                   this->stream_info_.name ()));    }  else if (ACE_OS::strcmp (qName, ACE_TEXT ("streamdef")) == 0)    {      this->in_stream_def_ = 1;      // @@ Set up stream service object    }  else if (ACE_OS::strcmp (qName, ACE_TEXT ("module")) == 0)    {      this->in_stream_def_ = 0;      this->in_module_ = 1;    }  else if (ACE_OS::strcmp (qName, ACE_TEXT ("resume")) == 0)    {      this->get_id (alist ACEXML_ENV_ARG_PARAMETER);      if (this->in_module_)        {//           ACE_DEBUG ((LM_INFO, ACE_TEXT ("Resume %s in stream %s\n"),//                       this->parsed_info_.name (),//                       this->stream_info_.name ()));          ACE_Module_Type *mt = (this->stream_ == 0)            ? 0            : this->stream_->find (this->parsed_info_.name ());          if (mt == 0)            {              // build the error message              ACE_CString msg (ACE_TEXT ("Can't locate module '"));              msg += ACE_CString (ACE_TEXT (this->parsed_info_.name ()));              msg += ACE_CString (ACE_TEXT ("'\n"));              ACEXML_THROW (ACEXML_SAXException (msg.c_str ()));            }          mt->resume ();        }      else        {//           ACE_DEBUG ((LM_INFO, ACE_TEXT ("Resume %s\n"),//                       this->parsed_info_.name ()));          if (ACE_Service_Config::resume (this->parsed_info_.name ()) == -1)            {              // build the error message              ACE_CString msg (ACE_TEXT ("Resume failed"));              msg += ACE_CString (ACE_TEXT (" for entity '"));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -