summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/examples/ImR/Combined_Service/test_server.cpp
blob: d9a7fd6804f036bbb2305d31ca3c0ab400e653ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// $Id$
// This is a simple test of an ImR using the corba interfaces
// It uses multicast to find the ImplRepoService

#include "testS.h"

#include "tao/IORTable/IORTable.h"
#include "tao/PortableServer/Root_POA.h"

#include "ace/streams.h"
#include "ace/ARGV.h"
#include "ace/Argv_Type_Converter.h"

using namespace CORBA;
using namespace PortableServer;

class test_i : public virtual POA_test {
  int n_;
public:
  test_i (void) : n_(0)
  {
  }
  virtual ~test_i (void) {
  }
  virtual CORBA::Long get (ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) {
    ACE_DEBUG((LM_DEBUG, "dynserver: get() %d\n", ++n_));
    return n_;
  }
};

POA_ptr createPersistPOA(const char* name, POA_ptr root_poa, POAManager_ptr poaman) {
  CORBA::PolicyList policies (2);
  policies.length (2);
  policies[0] = root_poa->create_id_assignment_policy(USER_ID);
  policies[1] = root_poa->create_lifespan_policy(PERSISTENT);
  POA_var poa = root_poa->create_POA(name, poaman, policies);
  policies[0]->destroy();
  policies[1]->destroy();
  return poa._retn();
}

int ACE_TMAIN(int argc, ACE_TCHAR* argv[])
{
  ACE_Argv_Type_Converter convert (argc, argv);

  try {
 
    ORB_var orb = ORB_init(convert.get_argc(), convert.get_ASCII_argv());

    Object_var obj = orb->resolve_initial_references("RootPOA");
    POA_var root_poa = POA::_narrow(obj.in());
    POAManager_var poaman = root_poa->the_POAManager();
    obj = orb->resolve_initial_references ("IORTable");
    IORTable::Table_var ior_table = IORTable::Table::_narrow (obj.in());
    ACE_ASSERT(! is_nil(ior_table.in()));

    ACE_DEBUG((LM_DEBUG, "test_server: creating poas. (Registers with ImR)\n"));

    POA_var poa1 = createPersistPOA("TestObject1", root_poa.in(), poaman.in());
    POA_var poa2 = createPersistPOA("TestObject2", root_poa.in(), poaman.in());

    ACE_DEBUG((LM_DEBUG, "test_server: activating objects.\n"));

    test_i svt1, svt2;

    ObjectId_var id = string_to_ObjectId("myobject");

    poa1->activate_object_with_id(id.in(), &svt1);
    poa2->activate_object_with_id(id.in(), &svt2);

    TAO_Root_POA* tmp_poa = dynamic_cast<TAO_Root_POA*>(poa1.in());
    obj = tmp_poa->id_to_reference_i (id.in(), false);
    String_var ior = orb->object_to_string(obj.in());
    ior_table->bind ("TestObject1", ior.in());

    tmp_poa = dynamic_cast<TAO_Root_POA*>(poa2.in());
    obj = tmp_poa->id_to_reference_i (id.in(), false);
    ior = orb->object_to_string(obj.in());
    ior_table->bind ("TestObject2", ior.in());

    poaman->activate();

    ACE_DEBUG((LM_DEBUG, "test_server: Running...\n"));

    orb->run();

    ACE_DEBUG((LM_DEBUG, "test_server: Shutting down...\n"));

    root_poa->destroy(1, 1);
    orb->destroy();

  } catch (CORBA::Exception& e) {
    ACE_PRINT_EXCEPTION(e, "TestServer::init()");
  }
  return 0;
}