summaryrefslogtreecommitdiff
path: root/ace/XtReactor.h
blob: a942757c48f822f91c280a3d439e86261038797b (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
/* -*- C++ -*- */
// $Id$

// ============================================================================
//
// = LIBRARY
//    ace
// 
// = FILENAME
//    XtReactor.h
//
// = AUTHOR
//    Eric C. Newton's <ecn@clark.net> and Douglas C. Schmidt <schmidt@cs.wustl.edu>
// 
// ============================================================================

#if !defined (ACE_XTREACTOR_H)
#define ACE_XTREACTOR_H

#include "ace/Reactor.h"

#if defined (ACE_HAS_XT)

#define String XtString
#include /**/ <X11/Intrinsic.h>
#undef String

// Forward decl.
struct ACE_XtReactorID;

class ACE_XtReactor : public ACE_Reactor
  // = TITLE
  //     An object oriented event demultiplexor and event handler
  //     dispatcher that uses the X Toolkit functions.
  //     
  // = DESCRIPTION
  //     The ACE_Reactor is an object-oriented event demultiplexor
  //     and event handler dispatcher.  The sources of events that the
  //     ACE_Reactor waits for and dispatches includes I/O events,
  //     signals, and timer events.
{
public:
  // = Initialization and termination methods.
  ACE_XtReactor (XtAppContext context,
		 size_t size = DEFAULT_SIZE, 
		 int restart = 0, 
		 ACE_Sig_Handler * = 0);
  virtual ~ACE_XtReactor (void);

  XtAppContext context (void);

  // Register timers/handles with Xt.
  virtual int attach (ACE_HANDLE handle, 
	              ACE_Event_Handler *handler,
	              ACE_Reactor_Mask mask);

  virtual int detach (ACE_HANDLE handle, ACE_Reactor_Mask mask);

  virtual int schedule_timer (ACE_Event_Handler *handler, 
		              const void *arg,
		              const ACE_Time_Value &delta_time, 
		              const ACE_Time_Value &interval);

  virtual int cancel_timer (ACE_Event_Handler *handler);
  virtual int cancel_timer (int timer_id, const void **arg);

protected:

  virtual int wait_for_multiple_events (ACE_Handle_Set &, 
					ACE_Handle_Set &,
					ACE_Handle_Set &, 
					ACE_Time_Value *); 

  virtual int XtWaitForMultipleEvents (int, 
				      ACE_Handle_Set &, 
				      ACE_Handle_Set &,
				      ACE_Handle_Set &, 
				      ACE_Time_Value *); 

  ACE_XtReactor (const ACE_Reactor &);
  ACE_XtReactor &operator = (const ACE_Reactor &);

  XtAppContext context_;
  struct ACE_XtReactorID *ids_;
  int id_len_;
  XtIntervalId timeout_;

private:
  void reset_timeout (void);
  static void TimerCallbackProc (XtPointer closure, XtIntervalId *id);
  static void InputCallbackProc (XtPointer closure, int* source, XtInputId *id);
};
#endif /* ACE_HAS_XT */

#endif /* ACE_XTREACTOR_H */