summaryrefslogtreecommitdiff
path: root/TAO/tests/Cubit/TAO/MT_Cubit/server.h
blob: 0c5f0b29f28405248403ea238ad6668aa90aa9cd (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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
// $Id$

// ============================================================================
//
// = LIBRARY
//    TAO/tests
//
// = FILENAME
//    server.h
//
// = AUTHOR
//    Andy Gokhale, Sumedh Mungee, and Sergio Flores-Gaitan
//
// ============================================================================

// ACE includes.
#include "ace/Get_Opt.h"
#include "ace/Log_Msg.h"
#include "ace/ARGV.h"
#include "ace/Sched_Params.h"
#include "orbsvcs/CosNamingC.h"

// TAO includes.
#include "tao/corba.h"

// MT Cubit application includes.
#include "cubit_i.h"

#if defined (VME_DRIVER)
#include <hostLib.h>
extern "C" STATUS vmeDrv (void);
extern "C" STATUS vmeDevCreate (char *);
#endif /* VME_DRIVER */

#if !defined (ACE_HAS_THREADS)
class NOOP_ACE_Barrier
{
public:
  NOOP_ACE_Barrier (int ) {}
  void wait (void) {}
};
#define ACE_Barrier NOOP_ACE_Barrier
#endif /* ACE_HAS_THREADS */

class Cubit_Task : public ACE_Task<ACE_NULL_SYNCH>
{
  // = TITLE
  //    Encapsulates an ORB for the Cubit application.
 public:
  Cubit_Task (const char *args,
              const char* orbname,
              u_int num_of_objs,
	      ACE_Barrier *barrier,
	      u_int task_id);
  // Constructor.
  
  virtual int svc (void);
  // Active Object entry point.

  CORBA::String get_servant_ior (u_int index);
  
protected:
  Cubit_Task (void);
  // No-op constructor.

private:
  int initialize_orb (void);
  // Initialize the ORB, and POA.

  int create_servants (void);
  // Create the servants

  CORBA::String key_;
  // All cubit objects will have this as prefix to its key.

  char *orbname_;
  // Name of the ORB.

  char *orbargs_;
  // ORB arguments.

  u_int num_of_objs_;
  // Number of objects we're managing.

  CORBA::ORB_var orb_;
  // Pointer to the ORB

  PortableServer::POA_var root_poa_;
  // Pointer to the Root POA

  PortableServer::POA_var poa_;
  // Pointer to the child POA used on the application.

  PortableServer::POAManager_var poa_manager_;
  // The POA Manager for both the root POA and the child POA.

  Cubit_i **servants_;
  // Array to hold the servants

  ACE_Barrier *barrier_;
  // Barrier for the multiple servants to synchronize after
  // binding to the orb.

  CORBA::String *servants_iors_;
  // ior strings of the servants

  CosNaming::NamingContext_var naming_context_;
  // Object reference to the naming service

  u_int task_id_;
  // id used for naming service object name.

  CosNaming::NamingContext_var mt_cubit_context_;
  // context where all MT Cubit objects will be created.
};

class Cubit_Factory_Task : public ACE_Task<ACE_NULL_SYNCH>
{
  // = TITLE
  //    Encapsulates an ORB for the Cubit Factory application.
public:
  Cubit_Factory_Task (const char *args,
		      const char* orbname,
		      CORBA::String * cubits,
		      u_int num_of_objs);
  // Constructor.

  virtual int svc (void);
  // Active Object entry point.

protected:
  Cubit_Factory_Task (void);
  // No-op constructor.

private:
  int initialize_orb (void);
  // Initialize the ORB, and POA.

  int create_factory (void);
  // activates the factory in the poa.

  char *orbname_;
  // Name of the ORB.

  char *orbargs_;
  // ORB arguments.

  CORBA::ORB_var orb_;
  // Pointer to the ORB

  PortableServer::POA_var root_poa_;
  // Pointer to the Root POA

  PortableServer::POA_var poa_;
  // Pointer to the child POA used on the application.

  PortableServer::POAManager_var poa_manager_;
  // The POA Manager for both the root POA and the child POA.

  CORBA::String *cubits_;
  // Array of cubit ior strings
  
  Cubit_Factory_i *cubit_factory_;
  // cubit factory object

  u_int num_of_objs_;
  // number of cubit objects we have ior's for.
};