filter_command.cpp

来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· C++ 代码 · 共 204 行

CPP
204
字号
// Filter_Command.cpp,v 1.5 2003/08/24 13:50:14 jwillemsen Exp

#include "Filter_Command.h"
#include "ace/Log_Msg.h"

ACE_RCSID(lib, TAO_Filter_Command, "Filter_Command.cpp,v 1.5 2003/08/24 13:50:14 jwillemsen Exp")

#include "LookupManager.h"
#include "Name.h"

TAO_Notify_Tests_Filter_Command::TAO_Notify_Tests_Filter_Command (void)
{
}

TAO_Notify_Tests_Filter_Command::~TAO_Notify_Tests_Filter_Command ()
{
}

const char*
TAO_Notify_Tests_Filter_Command::get_name (void)
{
  return TAO_Notify_Tests_Filter_Command::name ();
}

const char*
TAO_Notify_Tests_Filter_Command::name (void)
{
  return TAO_Notify_Tests_Name::filter_command;
}

void
TAO_Notify_Tests_Filter_Command::init (ACE_Arg_Shifter& arg_shifter)
{
  if (arg_shifter.is_anything_left ())
    {
      if (arg_shifter.cur_arg_strncasecmp ("-CreateFactory") == 0) // -Create factory_name ec
        {
          this->command_ = CREATE_FACTORY;

          arg_shifter.consume_arg ();

          this->name_ = arg_shifter.get_current (); // FF name
          arg_shifter.consume_arg ();

          this->factory_ = arg_shifter.get_current (); //EC
          arg_shifter.consume_arg ();
        }
      else if (arg_shifter.cur_arg_strncasecmp ("-CreateFilter") == 0) // -CreateFilter filter_name filterfactory_name
        {
          this->command_ = CREATE_FILTER;

          arg_shifter.consume_arg ();

          this->name_ = arg_shifter.get_current (); // Filter name

          arg_shifter.consume_arg ();

          this->factory_ = arg_shifter.get_current (); //FF
          arg_shifter.consume_arg ();
        }
      else if (arg_shifter.cur_arg_strncasecmp ("-Add_Constraint") == 0) // -Add_Constraint filter_name constraint_expr
        {
          this->command_ = ADD_CONSTRAINT;

          arg_shifter.consume_arg ();

          this->name_ = arg_shifter.get_current (); // Filter name

          arg_shifter.consume_arg ();

          this->constraint_ = arg_shifter.get_current (); //Constraint
          arg_shifter.consume_arg ();
        }
      else if (arg_shifter.cur_arg_strncasecmp ("-Add_Filter") == 0) // -Add_Filter filter_name FilterAdmin_Name
        {
          this->command_ = ADD_FILTER;

          arg_shifter.consume_arg ();

          this->name_ = arg_shifter.get_current (); // Filter name

          arg_shifter.consume_arg ();

          this->factory_ = arg_shifter.get_current (); //FilterAdmin
          arg_shifter.consume_arg ();
        }
      else if (arg_shifter.cur_arg_strncasecmp ("-Destroy") == 0) // -Destroy filter_name
        {
          this->command_ = DESTROY;

          arg_shifter.consume_arg ();

          this->name_ = arg_shifter.get_current (); // filter

          arg_shifter.consume_arg ();
        }
    }
}

void
TAO_Notify_Tests_Filter_Command::handle_create_filter_factory (ACE_ENV_SINGLE_ARG_DECL)
{
  CosNotifyChannelAdmin::EventChannel_var ec;

  LOOKUP_MANAGER->resolve (ec, this->factory_.c_str () ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  CosNotifyFilter::FilterFactory_var ff =
    ec->default_filter_factory (ACE_ENV_SINGLE_ARG_PARAMETER);
  ACE_CHECK;

  LOOKUP_MANAGER->_register (ff.in(), this->name_.c_str () ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;
}

void
TAO_Notify_Tests_Filter_Command::handle_create_filter (ACE_ENV_SINGLE_ARG_DECL)
{
  CosNotifyFilter::FilterFactory_var ff;

  LOOKUP_MANAGER->resolve (ff , this->factory_.c_str () ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  CosNotifyFilter::Filter_var filter =
    ff->create_filter ("ETCL" ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  LOOKUP_MANAGER->_register (filter.in(), this->name_.c_str () ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;
}

void
TAO_Notify_Tests_Filter_Command::handle_add_constraint (ACE_ENV_SINGLE_ARG_DECL)
{
  CosNotifyFilter::Filter_var filter;

  LOOKUP_MANAGER->resolve (filter , this->name_.c_str () ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  CosNotifyFilter::ConstraintExpSeq constraint_list (1);
  constraint_list.length (1);

  constraint_list[0].event_types.length (0);
  constraint_list[0].constraint_expr = CORBA::string_dup (this->constraint_.c_str ());

  ACE_DEBUG ((LM_DEBUG, "Adding constraint %s\n", this->constraint_.c_str ()));
  filter->add_constraints (constraint_list ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;
}

void
TAO_Notify_Tests_Filter_Command::handle_add_filter (ACE_ENV_SINGLE_ARG_DECL)
{
  CosNotifyFilter::Filter_var filter;

  LOOKUP_MANAGER->resolve (filter , this->name_.c_str () ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  CosNotifyFilter::FilterAdmin_var filter_admin;

  LOOKUP_MANAGER->resolve (filter_admin , this->factory_.c_str () ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  filter_admin->add_filter (filter.in () ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;
}

void
TAO_Notify_Tests_Filter_Command::handle_destroy_filter (ACE_ENV_SINGLE_ARG_DECL)
{
  CosNotifyFilter::Filter_var filter;

  LOOKUP_MANAGER->resolve (filter, this->name_.c_str () ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  filter->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
  ACE_CHECK;
}

void
TAO_Notify_Tests_Filter_Command::execute_i (ACE_ENV_SINGLE_ARG_DECL)
{
  if (this->command_ == CREATE_FACTORY)
    {
      this->handle_create_filter_factory (ACE_ENV_SINGLE_ARG_PARAMETER);
    }
  else if (this->command_ == CREATE_FILTER)
    {
      this->handle_create_filter (ACE_ENV_SINGLE_ARG_PARAMETER);
    }
  else if (this->command_ == ADD_CONSTRAINT)
    {
      this->handle_add_constraint (ACE_ENV_SINGLE_ARG_PARAMETER);
    }
  else if (this->command_ == ADD_FILTER)
    {
      this->handle_add_filter (ACE_ENV_SINGLE_ARG_PARAMETER);
    }
  else if (this->command_ == DESTROY)
    {
      this->handle_destroy_filter (ACE_ENV_SINGLE_ARG_PARAMETER);
    }
}

⌨️ 快捷键说明

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