summaryrefslogtreecommitdiff
path: root/TAO/examples/OBV/Typed_Events/Client_i.cpp
blob: 9d977b2cb59dcd38be274337d5b1644027488554 (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 "Client_i.h"
#include "Event_Types_impl.h"

#include "tao/ORB_Core.h"

#include "ace/Get_Opt.h"
#include "ace/OS_NS_sys_time.h"

int
Checkpoint_Client_i::run (const char *name,
                          int argc,
                          char *argv[])
{
  // Initialize the client (read ior...).
  if (checkpoint.init (name,argc, argv) == -1)
    return -1;

  // Set random seed
  ACE_Time_Value now (ACE_OS::gettimeofday ());
  ACE_OS::srand ((unsigned int) now.sec () );

  ACE_DECLARE_NEW_CORBA_ENV;

  ACE_TRY
    {
      // Make factories to unmarshal OBV, when getting back a list
      // of events which raised an alarm condition.

      // TAO_OBV_REGISTER_FACTORY (Event_factory);
      // This one not (see header file)

      TAO_OBV_REGISTER_FACTORY (Temperature_factory, Temperature);
      TAO_OBV_REGISTER_FACTORY (Position_factory, Position);
      TAO_OBV_REGISTER_FACTORY (Log_Msg_factory, Log_Msg);
      TAO_OBV_REGISTER_FACTORY (Event_List_factory, Event_List);
      TAO_OBV_REGISTER_FACTORY (Event_List_Link_factory, Event_List_Link);

      ACE_DEBUG ((LM_DEBUG, "Send some random events:\n"));

      CORBA::Float temperature = random_number (29, 34);
      Temperature_var t_e (ACE_static_cast(Temperature*,
                                           new Temperature_impl (temperature)));
      t_e->origin_id_ (KITCHEN);
      t_e->do_print ();
      checkpoint->put_event (t_e ACE_ENV_ARG_PARAMETER);
      ACE_TRY_CHECK;

      temperature = random_number (25,30);
      t_e = new Temperature_impl (temperature);
      t_e->origin_id_ (BATHROOM);
      t_e->do_print ();
      checkpoint->put_event (t_e ACE_ENV_ARG_PARAMETER);
      ACE_TRY_CHECK;

      Point point = { random_number (0,4),
                      random_number (0,4),
                      random_number (0,4)  };
      Position_var p_e (ACE_static_cast(Position*,
                                        new Position_impl (point)));
      p_e->origin_id_ (JONAS);
      p_e->do_print ();
      checkpoint->put_event (p_e ACE_ENV_ARG_PARAMETER);
      ACE_TRY_CHECK;


      int urgent = (random_number (0,2) > 1) ? 1 : 0;
      const char *a_text = (random_number (0,2) > 1) ? "Coffee is cold."
                                                     : "I want pasta.";
      Log_Msg_var l_e (ACE_static_cast(Log_Msg*,
                                       new Log_Msg_impl (urgent, a_text)));
      l_e->origin_id_ (JONAS);
      l_e->do_print ();
      checkpoint->put_event (l_e ACE_ENV_ARG_PARAMETER);
      ACE_TRY_CHECK;


      ACE_DEBUG ((LM_DEBUG, "\nNow getting the alarms:\n"));

      Event_List_var list (checkpoint->get_critical_events (ACE_ENV_SINGLE_ARG_PARAMETER));
      ACE_TRY_CHECK;

      for (Event_List_Iterator i (list); i.next (); i.advance ())
        {
          i.next ()-> do_print ();
        }

      if (checkpoint.shutdown () == 1)
        checkpoint->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);

      ACE_TRY_CHECK;
    }
  ACE_CATCHANY
    {
      ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"\n Exception in RMI");
      return -1;
    }
  ACE_ENDTRY;
  ACE_CHECK_RETURN (-1);

  return 0;
}

// Constructor.
Checkpoint_Client_i::Checkpoint_Client_i (void)
{
  //no-op
}

//Destructor.
Checkpoint_Client_i::~Checkpoint_Client_i (void)
{
  //no-op
}


// A random number in the range of min to max.
CORBA::Float random_number (double min, double max)
{
  double range = max - min;
  return ACE_static_cast (CORBA::Float, (min + (range * ACE_OS::rand () / (RAND_MAX + 1.0))));
}


#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
template class Client<Checkpoint,Checkpoint_var>;
#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
#pragma instantiate Client<Checkpoint,Checkpoint_var>
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */