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

📄 identity.cpp

📁 这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用于网络游戏医学图像网关的高qos要求.更详细的内容可阅读相应的材料
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// Identity.cpp,v 1.9 2002/01/29 20:21:08 okellogg Exp

// ==================================================
// = LIBRARY
//    TAO/test/POA/Identity
//
// = FILENAME
//    Identity.cpp
//
// = DESCRIPTION
//    This program demonstrates and tests how to move between id,
//    reference, and servants.
//
// = AUTHOR
//    Irfan Pyarali
// ==================================================

#include "testS.h"
#include "tao/ORB_Core.h"
#include "tao/Server_Strategy_Factory.h"

ACE_RCSID(Identity, Identity, "Identity.cpp,v 1.9 2002/01/29 20:21:08 okellogg Exp")

class test_i : public POA_test
{
public:

  test_i (PortableServer::POA_ptr poa)
    : poa_ (PortableServer::POA::_duplicate (poa))
    {
    }

  PortableServer::POA_ptr _default_POA (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
    {
      return PortableServer::POA::_duplicate (this->poa_.in ());
    }

protected:

  PortableServer::POA_var poa_;
};

void
create_poas (PortableServer::POA_ptr root_poa,
             PortableServer::LifespanPolicyValue lifespan_policy,
             PortableServer::POA_out first_poa,
             PortableServer::POA_out second_poa,
             PortableServer::POA_out third_poa,
             PortableServer::POA_out forth_poa
             ACE_ENV_ARG_DECL)
{
  // Policies for the new POAs
  CORBA::PolicyList policies (3);
  policies.length (3);

  policies[0] = root_poa->create_lifespan_policy (lifespan_policy
                                                  ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  policies[1] = root_poa->create_id_uniqueness_policy (PortableServer::MULTIPLE_ID
                                                       ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  policies[2] = root_poa->create_id_assignment_policy (PortableServer::SYSTEM_ID
                                                       ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  // Creation of the firstPOA
  ACE_CString name = "firstPOA";
  first_poa = root_poa->create_POA (name.c_str (),
                                    PortableServer::POAManager::_nil (),
                                    policies
                                    ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  policies[1]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
  ACE_CHECK;

  policies[1] = root_poa->create_id_uniqueness_policy (PortableServer::UNIQUE_ID
                                                       ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  // Creation of the secondPOA
  name = "secondPOA";
  second_poa = root_poa->create_POA (name.c_str (),
                                     PortableServer::POAManager::_nil (),
                                     policies
                                     ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  policies[2]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
  ACE_CHECK;

  policies[2] = root_poa->create_id_assignment_policy (PortableServer::USER_ID
                                                       ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  // Creation of the thirdPOA
  name = "thirdPOA";
  third_poa = root_poa->create_POA (name.c_str (),
                                    PortableServer::POAManager::_nil (),
                                    policies
                                    ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  policies[1]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
  ACE_CHECK;

  policies[1] = root_poa->create_id_uniqueness_policy (PortableServer::MULTIPLE_ID
                                                       ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  // Creation of the forthPOA
  name = "forthPOA";
  forth_poa = root_poa->create_POA (name.c_str (),
                                    PortableServer::POAManager::_nil (),
                                    policies
                                    ACE_ENV_ARG_PARAMETER);
  ACE_CHECK;

  // Creation of the new POAs over, so destroy the policies
  for (CORBA::ULong i = 0;
       i < policies.length ();
       ++i)
    {
      policies[i]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
      ACE_CHECK;
    }
}

void
test_poas (CORBA::ORB_ptr orb,
           PortableServer::POA_ptr root_poa,
           PortableServer::POA_ptr first_poa,
           PortableServer::POA_ptr second_poa,
           PortableServer::POA_ptr third_poa,
           PortableServer::POA_ptr forth_poa,
           int perform_deactivation_test
           ACE_ENV_ARG_DECL)
{
  {
    test_i servant (root_poa);

    CORBA::Object_var obj = root_poa->create_reference ("IDL:test:1.0"
                                                        ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    CORBA::String_var string = orb->object_to_string (obj.in ()
                                                      ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));

    PortableServer::ObjectId_var id = root_poa->reference_to_id (obj.in ()
                                                                 ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    root_poa->activate_object_with_id (id.in (),
                                       &servant
                                       ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    obj = root_poa->id_to_reference (id.in ()
                                     ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    string = orb->object_to_string (obj.in ()
                                    ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));

    PortableServer::Servant servant_from_reference =
      root_poa->reference_to_servant (obj.in ()
                                      ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    PortableServer::Servant servant_from_id =
      root_poa->id_to_servant (id.in ()
                               ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    if (servant_from_reference != servant_from_id
        || servant_from_reference != &servant)
      {
        ACE_ERROR ((LM_ERROR,
                    "Mismatched servant_from_reference, "
                    "servant_from_id and &servant\n"));
      }

    obj = root_poa->servant_to_reference (&servant
                                          ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    string = orb->object_to_string (obj.in ()
                                    ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));

    obj = servant._this (ACE_ENV_SINGLE_ARG_PARAMETER);
    ACE_CHECK;

    string = orb->object_to_string (obj.in ()
                                    ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));

    PortableServer::ObjectId_var id_from_servant = root_poa->servant_to_id (&servant
                                                                            ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    ACE_ASSERT (id_from_servant.in () == id.in ());

    root_poa->deactivate_object (id.in ()
                                 ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    if (perform_deactivation_test)
      {
        root_poa->activate_object_with_id (id.in (),
                                           &servant
                                           ACE_ENV_ARG_PARAMETER);
        ACE_CHECK;

        servant_from_reference = root_poa->reference_to_servant (obj.in ()
                                                                 ACE_ENV_ARG_PARAMETER);
        ACE_CHECK;

        ACE_ASSERT (servant_from_reference == &servant);

        root_poa->deactivate_object (id.in ()
                                     ACE_ENV_ARG_PARAMETER);
        ACE_CHECK;
      }
  }

  {
    test_i servant (root_poa);

    PortableServer::ObjectId_var id = root_poa->activate_object (&servant
                                                                 ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    CORBA::Object_var obj = root_poa->id_to_reference (id.in ()
                                                       ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    CORBA::String_var string = orb->object_to_string (obj.in ()
                                                      ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));

    obj = root_poa->create_reference_with_id (id.in (),
                                              "IDL:test:1.0"
                                              ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    string = orb->object_to_string (obj.in ()
                                    ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));

    root_poa->deactivate_object (id.in ()
                                 ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;
  }

  {
    test_i servant (first_poa);

    CORBA::Object_var obj = first_poa->create_reference ("IDL:test:1.0"
                                                         ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    CORBA::String_var string = orb->object_to_string (obj.in ()
                                                      ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));

    PortableServer::ObjectId_var id = first_poa->reference_to_id (obj.in ()
                                                                  ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    first_poa->activate_object_with_id (id.in (),
                                        &servant
                                        ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    obj = first_poa->id_to_reference (id.in ()
                                      ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    string = orb->object_to_string (obj.in ()
                                    ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));

    PortableServer::Servant servant_from_reference =
      first_poa->reference_to_servant (obj.in ()
                                       ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    PortableServer::Servant servant_from_id =
      first_poa->id_to_servant (id.in ()
                                ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    if (servant_from_reference != servant_from_id
        || servant_from_reference != &servant)
      {
        ACE_ERROR ((LM_ERROR,
                    "Mismatched servant_from_reference, "
                    "servant_from_id and &servant\n"));
      }

    first_poa->deactivate_object (id.in ()
                                  ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    if (perform_deactivation_test)
      {
        first_poa->activate_object_with_id (id.in (),
                                            &servant
                                            ACE_ENV_ARG_PARAMETER);
        ACE_CHECK;

        servant_from_reference = first_poa->reference_to_servant (obj.in ()
                                                                  ACE_ENV_ARG_PARAMETER);
        ACE_CHECK;

        ACE_ASSERT (servant_from_reference == &servant);

        first_poa->deactivate_object (id.in ()
                                      ACE_ENV_ARG_PARAMETER);
        ACE_CHECK;
      }
  }

  {
    test_i servant (first_poa);

    PortableServer::ObjectId_var id = first_poa->activate_object (&servant
                                                                  ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    CORBA::Object_var obj = first_poa->id_to_reference (id.in ()
                                                        ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    CORBA::String_var string = orb->object_to_string (obj.in ()
                                                      ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));

    obj = first_poa->create_reference_with_id (id.in (),
                                               "IDL:test:1.0"
                                               ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    string = orb->object_to_string (obj.in ()
                                    ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));

    first_poa->deactivate_object (id.in ()
                                  ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;
  }

  {
    test_i servant (second_poa);

    CORBA::Object_var obj = second_poa->create_reference ("IDL:test:1.0"
                                                          ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    CORBA::String_var string = orb->object_to_string (obj.in ()
                                                      ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    ACE_DEBUG ((LM_DEBUG, "%s\n", string.in ()));

    PortableServer::ObjectId_var id = second_poa->reference_to_id (obj.in ()
                                                                   ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    second_poa->activate_object_with_id (id.in (),
                                         &servant
                                         ACE_ENV_ARG_PARAMETER);
    ACE_CHECK;

    obj = second_poa->id_to_reference (id.in ()
                                       ACE_ENV_ARG_PARAMETER);

⌨️ 快捷键说明

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