summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Time/TAO_Time_Service_Clerk.h
blob: 4a5da1e566ddceda572eeb943377951915b9103b (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
// -*- C++ -*-

//=============================================================================
/**
 *  @file    TAO_Time_Service_Clerk.h
 *
 *  $Id$
 *
 *  This class implements the CosTime::TimeService IDL interface.
 *
 *
 *  @author Vishal Kachroo  <vishal@cs.wustl.edu>
 */
//=============================================================================


#ifndef TAO_TIME_SERVICE_CLERK_H
#define TAO_TIME_SERVICE_CLERK_H
#include /**/ "ace/pre.h"

#include "ace/Reactor.h"
#include "orbsvcs/orbsvcs/Naming/Naming_Utils.h"

#include "orbsvcs/orbsvcs/TimeServiceS.h"
#include "Timer_Helper.h"
#include "time_export.h"

/**
 * @class TAO_Time_Service_Clerk
 *
 * @brief TimeService Object Implementation.
 *
 * The Object implementation implements methods to retrieve
 * GLOBAL time as well as secure GLOBAL time. The times are
 * retrieved as UTOs. The object also allows creation of a TIO
 * for a given time interval.  In general, the TimeService clerk
 * manages the UTOs and the TIOs. The notion of time returned
 * here is the globally synchronized time.
 */
class TAO_Time_Export TAO_Time_Service_Clerk : public POA_CosTime::TimeService
{
public:

  /// Helper class to help in the updation of time.
  friend class Timer_Helper;

  /// Unbounded set of IORs.
  typedef ACE_Array_Base<CosTime::TimeService_var> IORS;

  // = Initialization and termination methods.
  /// Constructor.
  TAO_Time_Service_Clerk (int timer_value,
                          int timer_value_usecs,
                          const IORS& server);

  /// Destructor.
  ~TAO_Time_Service_Clerk (void);

  /// This operation returns the global time and an estimate of
  /// inaccuracy in a UTO.
  virtual CosTime::UTO_ptr universal_time (ACE_ENV_SINGLE_ARG_DECL)
    ACE_THROW_SPEC ((CORBA::SystemException,
                     CosTime::TimeUnavailable));

  /**
   * This operation returns the global time in a UTO only if the time
   * can be guaranteed to have been obtained securely. Currently this
   * operation is not implemented and throws a CORBA::NO_IMPLEMENT
   * exception, if called.
   */
  virtual CosTime::UTO_ptr secure_universal_time (ACE_ENV_SINGLE_ARG_DECL)
    ACE_THROW_SPEC ((CORBA::SystemException,
                     CosTime::TimeUnavailable));

  /// This creates a new UTO based on the given parameters.
  virtual CosTime::UTO_ptr new_universal_time (TimeBase::TimeT time,
                                               TimeBase::InaccuracyT inaccuracy,
                                               TimeBase::TdfT tdf
                                               ACE_ENV_ARG_DECL)
    ACE_THROW_SPEC ((CORBA::SystemException));

  /// This creates a new UTO given a time in the UtcT form.
  virtual CosTime::UTO_ptr uto_from_utc (const TimeBase::UtcT &utc
                                         ACE_ENV_ARG_DECL)
    ACE_THROW_SPEC ((CORBA::SystemException));

  /// This creates a new TIO with the given parameters.
  virtual CosTime::TIO_ptr new_interval (TimeBase::TimeT lower,
                                         TimeBase::TimeT upper
                                         ACE_ENV_ARG_DECL)
    ACE_THROW_SPEC ((CORBA::SystemException));

  /// Return the globally synchronized time.
  virtual CORBA::ULongLong get_time (void);

  /// This method is called by the driver program to set the Naming
  /// Server instance.
  void name_server (TAO_Naming_Server &server);

  /// Returns the time displacement factor.
  CORBA::Short time_displacement_factor (void);

  /// Set the TDF.
  void time_displacement_factor (CORBA::Short);

  /// Get method for inaccuracy.
  TimeBase::InaccuracyT inaccuracy (void);

  /// Set method for inaccuracy.
  void inaccuracy (TimeBase::InaccuracyT inaccuracy);

  /// Clerk's notion of time.
  CORBA::ULongLong time_;

private:

  /// Time displacement factor in minutes.
  CORBA::Short time_displacement_factor_;

  /// Inaccuracy in the time.
  TimeBase::InaccuracyT inaccuracy_;

  /// Set of server Time Server IORs.
  IORS server_;

  /// Time when last global synchronization was done.
  CORBA::ULongLong update_timestamp_;

  /**
   * This is a friend class that inherits from the Event Handler
   * class.  The handle_timeout method of this class is scheduled for
   * periodic invocation by the reactor. This method, in turn, updates
   * the clerks notion of time. Using this class obviates the need for
   * the clerk to multiple inherit from the servant base as well as
   * the event handler.
   */
  Timer_Helper helper_;
};

#include /**/ "ace/post.h"
#endif /* TIME_SERVICE_CLERK_H */