summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/Bug_2709_Regression/client.cpp
blob: 644645faa3c95c78a4cf0bd0fd6591b6356c983b (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
// $Id$

#include "TestC.h"
#include "TestImpl.h"
#include "Client_Task.h"

#include "ace/Get_Opt.h"
#include "ace/Argv_Type_Converter.h"
#include "tao/ORB_Core.h"
#include "Server_Task.h"

//////////////////////////////////////////////////////////////////////////

ACE_CString collocated_ior_file("collocated_server.ior");
ACE_CString server_ior_file("server.ior");

//////////////////////////////////////////////////////////////////////////

int
parse_args (int argc, char *argv[])
{
  ACE_Get_Opt get_opts (argc, argv, "s:o:");
  int c;

  while ((c = get_opts ()) != -1)
    switch (c)
      {
      case 's':
        server_ior_file = get_opts.opt_arg ();
        break;
      case 'o':
        collocated_ior_file = get_opts.opt_arg ();
        break;

      case '?':
      default:
        ACE_ERROR_RETURN ((LM_ERROR,
          "usage:  %s "
          "-s <server_iorfile>"
          "-o <collocated_iorfile>"
          "\n",
          argv [0]),
          -1);
      }

  // Indicates successful parsing of the command line
  return 0;
}

int
main (int argc, char * argv [])
{
  int failed = 0;

  ACE_CString server_orb;
  server_orb.set ("server_orb");
  ACE_CString client_orb;
  client_orb.set ("client_orb");

  ACE_TRY_NEW_ENV
    {
      if (parse_args (argc, argv) != 0)
        return 1;

      ACE_Argv_Type_Converter satc (argc, argv);
      CORBA::ORB_var sorb =
        CORBA::ORB_init (satc.get_argc (),
                         satc.get_TCHAR_argv (),
                         server_orb.c_str ()
                         ACE_ENV_ARG_PARAMETER);
      ACE_TRY_CHECK;

      ACE_Argv_Type_Converter catc (argc, argv);
      CORBA::ORB_var corb =
        CORBA::ORB_init (catc.get_argc (),
                         catc.get_TCHAR_argv (),
                         client_orb.c_str ()
                         ACE_ENV_ARG_PARAMETER);
      ACE_TRY_CHECK;

      {
        ACE_Manual_Event me;

        Server_Task server_task (collocated_ior_file.c_str(),
          sorb.in (),
          me,
          ACE_Thread_Manager::instance ());

        if (server_task.activate (THR_NEW_LWP | THR_JOINABLE,
          1,
          1) == -1)
          {
            ACE_ERROR ((LM_ERROR, "Error activating server task\n"));
          }

        // Wait for the server thread to do some processing
        me.wait ();

        Client_Task client_task (corb.in (),
          ACE_Thread_Manager::instance (),
          collocated_ior_file, server_ior_file);

        if (client_task.activate (THR_NEW_LWP | THR_JOINABLE,
          1,
          1) == -1)
          {
            ACE_ERROR ((LM_ERROR, "Error activating client task\n"));
          }

        ACE_Thread_Manager::instance ()->wait ();
      }

      sorb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
      ACE_TRY_CHECK;
    }
  ACE_CATCHANY
    {
      ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
                           "Exception caught:");
      return 1;
    }
  ACE_ENDTRY;

  if (failed)
    {
      ACE_DEBUG ((LM_ERROR, "Test failed.\n") );
    }

  return 0;
}