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)
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
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
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
00097
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