summaryrefslogtreecommitdiff
path: root/flat/CIAO/examples/Null_Component/StaticDAnCEApp.cpp
blob: 2916d5cfd68a6143c63027630906f27252d0479e (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
97
98
99
100
101
102
// $Id$

#include "plan.h"

#include "NodeManager/NodeManager_Impl.h"

#include "tao/IORTable/IORTable.h"

int
ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
  // Initialize the ORB so that CORBA::Any will work.
  CORBA::ORB_var orb = CORBA::ORB_init (argc,
                                        argv);
                                        
  try
  {
    // Get reference to Root POA.
    CORBA::Object_var obj =
      orb->resolve_initial_references ("RootPOA");

    PortableServer::POA_var poa =
      PortableServer::POA::_narrow (obj.in ());

    // Activate POA manager.
    PortableServer::POAManager_var mgr = poa->the_POAManager ();

    mgr->activate ();

    int homes_table_size =
      sizeof (homes_table) / sizeof (HomeAttributes);

    CIAO::HOMECREATOR_FUNCPTR_MAP home_creator_fptr_map;
    CIAO::HOMESERVANTCREATOR_FUNCPTR_MAP homesvnt_creator_fptr_map;
    CIAO::Static_Config_EntryPoints_Maps static_config_entrypoints_maps;
    
    static_config_entrypoints_maps.home_creator_funcptr_map_ =
      &home_creator_fptr_map;
      
    static_config_entrypoints_maps.home_servant_creator_funcptr_map_ =
      &homesvnt_creator_fptr_map;

    for (int i = 0; i < homes_table_size; ++i)
      {
        home_creator_fptr_map.bind (homes_table[i].executor_entrypt_,
                                    homes_table[i].executor_fptr_);

        homesvnt_creator_fptr_map.bind (homes_table[i].servant_entrypt_,
                                        homes_table[i].servant_fptr_);
      }

    CIAO::Static_NodeManager_Impl *static_node_manager_impl;
    
    // Create and install the CIAO Daemon servant.

    ACE_DEBUG ((LM_DEBUG, "creating static_node_manager\n"));

    static_node_manager_impl =
      new CIAO::Static_NodeManager_Impl ("NodeManager",
                                         orb.in (),
                                         poa.in (),
                                         "", //exe location
                                         "", //exe options
                                         0, //spawn delay
                                         &static_config_entrypoints_maps);

    static_node_manager_impl->init ();

    CORBA::Object_var table_object =
      orb->resolve_initial_references ("IORTable");

    IORTable::Table_var adapter =
      IORTable::Table::_narrow (table_object.in ());

    if (CORBA::is_nil (adapter.in ()))
      {
        ACE_ERROR_RETURN ((LM_ERROR, "Nil IORTable\n"), -1);
      }

    CIAO::NodeManagerDaemon_var manager =
      static_node_manager_impl->_this ();

    CORBA::String_var str =
      orb->object_to_string (manager.in ());

    adapter->bind ("NodeManager", str.in ());

    // Run the main event loop for the ORB.
    orb->run ();

    poa->destroy (true, true);

    orb->destroy ();
  }
  catch (CORBA::Exception& ex)
  {
    ex._tao_print_exception ("Caught CORBA Exception: ");
    return -1;
  }

  return 0;
}