summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/CosEvent/lib/Counting_Supplier.h
blob: 73ee061f1c3f6f6140a7e2ac552126779d9579bd (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
/* -*- C++ -*- */
//=============================================================================
/**
 *  @file   Counting_Supplier.h
 *
 *  @author Carlos O'Ryan (coryan@cs.wustl.edu)
 */
//=============================================================================


#ifndef CEC_COUNTING_SUPPLIER_H
#define CEC_COUNTING_SUPPLIER_H

#include "cectest_export.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "orbsvcs/CosEventCommS.h"
#include "orbsvcs/CosEventChannelAdminC.h"
#include "ace/Task.h"

/**
 * @class CEC_Counting_Supplier
 *
 * @brief Simple supplier object
 *
 * This class is a supplier of events.
 */
class CEC_Test_Export CEC_Counting_Supplier : public POA_CosEventComm::PushSupplier
{
public:
  /// Constructor
  CEC_Counting_Supplier ();

  // = The CosEventComm::PushSupplier methods

  /// Simple connect/disconnect methods..
  void connect (CosEventChannelAdmin::SupplierAdmin_ptr supplier_admin);
  void disconnect ();

  /// Push an event.
  void push (const CORBA::Any& events);

  /// The skeleton methods.
  virtual void disconnect_push_supplier ();

  /// Count the number of events sent
  CORBA::ULong event_count;

  /// Count the number of disconnect_push_supplier calls
  CORBA::ULong disconnect_count;

private:
  /// Our proxy
  CosEventChannelAdmin::ProxyPushConsumer_var consumer_proxy_;
};

class CEC_Test_Export CEC_Counting_Supplier_Task : public ACE_Task_Base
{
public:
  /// Create the task...
  CEC_Counting_Supplier_Task (CEC_Counting_Supplier *supplier,
                              int milliseconds = 0);

  // = Check the ACE_Task_Base documentation.
  int svc ();

  void stop ();
  CORBA::ULong push_count ();

  /// Run a single iteration of the test
  void run ();

private:
  /// The supplier we are turning into an active object
  CEC_Counting_Supplier *supplier_;

  /// Set to 1 when the test must stop
  int stop_flag_;

  /// Count the number of push() calls
  CORBA::ULong push_count_;

  /// If not zero then pause for <milliseconds> before sending each
  /// event.
  int milliseconds_;

  TAO_SYNCH_MUTEX lock_;
};

// ****************************************************************

/**
 * @class CEC_Pull_Counting_Supplier
 *
 * @brief Simple supplier object
 *
 * This class is a supplier of events.
 */
class CEC_Test_Export CEC_Pull_Counting_Supplier : public POA_CosEventComm::PullSupplier
{
public:
  /// Constructor
  CEC_Pull_Counting_Supplier ();

  // = The CosEventComm::PullSupplier methods

  /// Simple connect/disconnect methods..
  void connect (CosEventChannelAdmin::SupplierAdmin_ptr supplier_admin);
  void disconnect ();

  // The PullSupplier methods.
  CORBA::Any* pull ();
  CORBA::Any* try_pull (CORBA::Boolean_out has_event);
  virtual void disconnect_pull_supplier ();

  /// Count the number of events sent
  CORBA::ULong event_count;

  /// Count the number of disconnect_pull_supplier calls
  CORBA::ULong disconnect_count;

private:
  /// Our proxy
  CosEventChannelAdmin::ProxyPullConsumer_var consumer_proxy_;
};

#endif /* ECT_SUPPLIER_H */