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

// ============================================================================
//
// = LIBRARY
//    TAO/orbsvcs/Time_Service
//
// = FILENAME
//    TAO_Time_Service_Clerk.h
//
// = DESCRIPTION
//    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/Reactor.h"
#include "orbsvcs/Naming/Naming_Utils.h"

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

class TAO_ORBSVCS_Export TAO_Time_Service_Clerk : public POA_CosTime::TimeService
{
  // = TITLE
  //    TimeService Object Implementation.
  //
  // = DESCRIPTION
  //    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.
public:

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

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

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

  ~TAO_Time_Service_Clerk (void);
  // Destructor.

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

  virtual CosTime::UTO_ptr secure_universal_time (CORBA::Environment &env)
    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 new_universal_time (TimeBase::TimeT time,
                                               TimeBase::InaccuracyT inaccuracy,
                                               TimeBase::TdfT tdf,
                                               CORBA::Environment &env)
    ACE_THROW_SPEC ((CORBA::SystemException));
  // This creates a new UTO based on the given parameters.

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

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

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

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

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

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

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

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

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

private:

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

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

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

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

  Timer_Helper helper_;
  // 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.
};

#endif /* TIME_SERVICE_CLERK_H */