SHMIOP_Factory.cpp

Go to the documentation of this file.
00001 #include "tao/Strategies/SHMIOP_Factory.h"
00002 
00003 #if defined (TAO_HAS_SHMIOP) && (TAO_HAS_SHMIOP != 0)
00004 
00005 #include "tao/Strategies/SHMIOP_Acceptor.h"
00006 #include "tao/Strategies/SHMIOP_Connector.h"
00007 
00008 #include "tao/ORB_Constants.h"
00009 
00010 #include "ace/Arg_Shifter.h"
00011 #include "ace/Argv_Type_Converter.h"
00012 #include "ace/OS_NS_strings.h"
00013 
00014 
00015 ACE_RCSID (Strategies,
00016            SHMIOP_Factory,
00017            "SHMIOP_Factory.cpp,v 1.10 2006/03/16 15:53:36 sjiang Exp")
00018 
00019 
00020 static const char prefix_[] = "shmiop";
00021 
00022 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00023 
00024 TAO_SHMIOP_Protocol_Factory::TAO_SHMIOP_Protocol_Factory (void)
00025   : TAO_Protocol_Factory (TAO_TAG_SHMEM_PROFILE),
00026     major_ (TAO_DEF_GIOP_MAJOR),
00027     minor_ (TAO_DEF_GIOP_MINOR),
00028     mmap_prefix_ (0),
00029     min_bytes_ (10*1024)        // @@ Nanbor, remove this magic number!!
00030 {
00031 }
00032 
00033 TAO_SHMIOP_Protocol_Factory::~TAO_SHMIOP_Protocol_Factory (void)
00034 {
00035   delete [] this->mmap_prefix_;
00036 }
00037 
00038 int
00039 TAO_SHMIOP_Protocol_Factory::match_prefix (const ACE_CString &prefix)
00040 {
00041   // Check for the proper prefix for this protocol.
00042   return (ACE_OS::strcasecmp (prefix.c_str (), ::prefix_) == 0);
00043 }
00044 
00045 const char *
00046 TAO_SHMIOP_Protocol_Factory::prefix (void) const
00047 {
00048   return ::prefix_;
00049 }
00050 
00051 char
00052 TAO_SHMIOP_Protocol_Factory::options_delimiter (void) const
00053 {
00054   return '/';
00055 }
00056 
00057 TAO_Acceptor *
00058 TAO_SHMIOP_Protocol_Factory::make_acceptor (void)
00059 {
00060   TAO_SHMIOP_Acceptor *acceptor = 0;
00061 
00062   ACE_NEW_RETURN (acceptor,
00063                   TAO_SHMIOP_Acceptor,
00064                   0);
00065 
00066   acceptor->set_mmap_options (this->mmap_prefix_,
00067                               this->min_bytes_);
00068 
00069   return acceptor;
00070 }
00071 
00072 int
00073 TAO_SHMIOP_Protocol_Factory::init (int argc,
00074                                    ACE_TCHAR* argv[])
00075 {
00076   // Copy command line parameter not to use original as well as type conversion.
00077   ACE_Argv_Type_Converter command_line(argc, argv);
00078 
00079   ACE_Arg_Shifter arg_shifter (command_line.get_argc(), command_line.get_TCHAR_argv());
00080 
00081   while (arg_shifter.is_anything_left ())
00082     {
00083       const ACE_TCHAR *current_arg = 0;
00084 
00085       if (0 != (current_arg = arg_shifter.get_the_parameter (ACE_TEXT("-MMAPFileSize"))))
00086         {
00087           this->min_bytes_ = ACE_OS::atoi (current_arg);
00088           arg_shifter.consume_arg ();
00089         }
00090       else if (0 != (current_arg = arg_shifter.get_the_parameter (ACE_TEXT("-MMAPFilePrefix"))))
00091         {
00092           this->mmap_prefix_ = ACE::strnew (current_arg);
00093           arg_shifter.consume_arg ();
00094         }
00095       else
00096         // Any arguments that don't match are ignored so that the
00097         // caller can still use them.
00098         arg_shifter.ignore_arg ();
00099     }
00100 
00101   return 0;
00102 }
00103 
00104 TAO_Connector *
00105 TAO_SHMIOP_Protocol_Factory::make_connector (void)
00106 {
00107   TAO_Connector *connector = 0;
00108 
00109   ACE_NEW_RETURN (connector,
00110                   TAO_SHMIOP_Connector,
00111                   0);
00112   return connector;
00113 }
00114 
00115 int
00116 TAO_SHMIOP_Protocol_Factory::requires_explicit_endpoint (void) const
00117 {
00118   return 1;
00119 }
00120 
00121 TAO_END_VERSIONED_NAMESPACE_DECL
00122 
00123 ACE_STATIC_SVC_DEFINE (TAO_SHMIOP_Protocol_Factory,
00124                        ACE_TEXT ("SHMIOP_Factory"),
00125                        ACE_SVC_OBJ_T,
00126                        &ACE_SVC_NAME (TAO_SHMIOP_Protocol_Factory),
00127                        ACE_Service_Type::DELETE_THIS |
00128                                   ACE_Service_Type::DELETE_OBJ,
00129                        0)
00130 
00131 ACE_FACTORY_DEFINE (TAO_Strategies, TAO_SHMIOP_Protocol_Factory)
00132 
00133 #endif /* TAO_HAS_SHMIOP && TAO_HAS_SHMIOP != 0 */

Generated on Thu Nov 9 13:39:30 2006 for TAO_Strategies by doxygen 1.3.6