xref: /haiku/src/servers/registrar/MessageEvent.cpp (revision 5293aa41b4462e232ed01fe6765c684dfa46f5bc)
1*5293aa41SIngo Weinhold //------------------------------------------------------------------------------
2*5293aa41SIngo Weinhold //	Copyright (c) 2001-2002, OpenBeOS
3*5293aa41SIngo Weinhold //
4*5293aa41SIngo Weinhold //	Permission is hereby granted, free of charge, to any person obtaining a
5*5293aa41SIngo Weinhold //	copy of this software and associated documentation files (the "Software"),
6*5293aa41SIngo Weinhold //	to deal in the Software without restriction, including without limitation
7*5293aa41SIngo Weinhold //	the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*5293aa41SIngo Weinhold //	and/or sell copies of the Software, and to permit persons to whom the
9*5293aa41SIngo Weinhold //	Software is furnished to do so, subject to the following conditions:
10*5293aa41SIngo Weinhold //
11*5293aa41SIngo Weinhold //	The above copyright notice and this permission notice shall be included in
12*5293aa41SIngo Weinhold //	all copies or substantial portions of the Software.
13*5293aa41SIngo Weinhold //
14*5293aa41SIngo Weinhold //	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*5293aa41SIngo Weinhold //	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*5293aa41SIngo Weinhold //	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17*5293aa41SIngo Weinhold //	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18*5293aa41SIngo Weinhold //	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19*5293aa41SIngo Weinhold //	FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20*5293aa41SIngo Weinhold //	DEALINGS IN THE SOFTWARE.
21*5293aa41SIngo Weinhold //
22*5293aa41SIngo Weinhold //	File Name:		MessageEvent.cpp
23*5293aa41SIngo Weinhold //	Author:			Ingo Weinhold (bonefish@users.sf.net)
24*5293aa41SIngo Weinhold //					YellowBites (http://www.yellowbites.com)
25*5293aa41SIngo Weinhold //	Description:	A special event that sends a message when executed.
26*5293aa41SIngo Weinhold //------------------------------------------------------------------------------
27*5293aa41SIngo Weinhold 
28*5293aa41SIngo Weinhold #include <Handler.h>
29*5293aa41SIngo Weinhold #include <Looper.h>
30*5293aa41SIngo Weinhold 
31*5293aa41SIngo Weinhold #include "MessageEvent.h"
32*5293aa41SIngo Weinhold 
33*5293aa41SIngo Weinhold /*!	\class MessageEvent
34*5293aa41SIngo Weinhold 	\brief A special event that sends a message when executed.
35*5293aa41SIngo Weinhold 
36*5293aa41SIngo Weinhold 	The constructors set the "auto delete" flag to \c true by default. It can
37*5293aa41SIngo Weinhold 	be changed by SetAutoDelete(), but note, that the object's creator is
38*5293aa41SIngo Weinhold 	responsible for its destruction then.
39*5293aa41SIngo Weinhold */
40*5293aa41SIngo Weinhold 
41*5293aa41SIngo Weinhold /*!	\var BMessage MessageEvent::fMessage
42*5293aa41SIngo Weinhold 	\brief Message to be sent.
43*5293aa41SIngo Weinhold */
44*5293aa41SIngo Weinhold 
45*5293aa41SIngo Weinhold /*!	\var BMessenger MessageEvent::fMessenger
46*5293aa41SIngo Weinhold 	\brief Message target.
47*5293aa41SIngo Weinhold 
48*5293aa41SIngo Weinhold 	Valid only, if \a fHandler is \c NULL.
49*5293aa41SIngo Weinhold */
50*5293aa41SIngo Weinhold 
51*5293aa41SIngo Weinhold /*!	\var BHandler *MessageEvent::fHandler
52*5293aa41SIngo Weinhold 	\brief Message target.
53*5293aa41SIngo Weinhold 
54*5293aa41SIngo Weinhold 	May be \c NULL, then \a fMessenger specifies the message target.
55*5293aa41SIngo Weinhold */
56*5293aa41SIngo Weinhold 
57*5293aa41SIngo Weinhold 
58*5293aa41SIngo Weinhold // constructor
59*5293aa41SIngo Weinhold /*!	\brief Creates a new MessageEvent with a target BHandler and a message
60*5293aa41SIngo Weinhold 		   command.
61*5293aa41SIngo Weinhold 
62*5293aa41SIngo Weinhold 	\note The supplied BHandler must be valid the whole life time of the
63*5293aa41SIngo Weinhold 		  MessageEvent.
64*5293aa41SIngo Weinhold 
65*5293aa41SIngo Weinhold 	\param time The time at which the message shall be sent.
66*5293aa41SIngo Weinhold 	\param handler The BHandler to which the message shall be delivered.
67*5293aa41SIngo Weinhold 	\param command The "what" field of the message to be sent.
68*5293aa41SIngo Weinhold */
69*5293aa41SIngo Weinhold MessageEvent::MessageEvent(bigtime_t time, BHandler* handler, uint32 command)
70*5293aa41SIngo Weinhold 	: Event(time, true),
71*5293aa41SIngo Weinhold 	  fMessage(command),
72*5293aa41SIngo Weinhold 	  fMessenger(),
73*5293aa41SIngo Weinhold 	  fHandler(handler)
74*5293aa41SIngo Weinhold {
75*5293aa41SIngo Weinhold }
76*5293aa41SIngo Weinhold 
77*5293aa41SIngo Weinhold // constructor
78*5293aa41SIngo Weinhold /*!	\brief Creates a new MessageEvent with a target BHandler and a message.
79*5293aa41SIngo Weinhold 
80*5293aa41SIngo Weinhold 	The caller retains ownership of the supplied message. It can savely be
81*5293aa41SIngo Weinhold 	deleted after the constructor returns.
82*5293aa41SIngo Weinhold 
83*5293aa41SIngo Weinhold 	\note The supplied BHandler must be valid the whole life time of the
84*5293aa41SIngo Weinhold 		  MessageEvent.
85*5293aa41SIngo Weinhold 
86*5293aa41SIngo Weinhold 	\param time The time at which the message shall be sent.
87*5293aa41SIngo Weinhold 	\param handler The BHandler to which the message shall be delivered.
88*5293aa41SIngo Weinhold 	\param message The message to be sent.
89*5293aa41SIngo Weinhold */
90*5293aa41SIngo Weinhold MessageEvent::MessageEvent(bigtime_t time, BHandler* handler,
91*5293aa41SIngo Weinhold 						   const BMessage *message)
92*5293aa41SIngo Weinhold 	: Event(time, true),
93*5293aa41SIngo Weinhold 	  fMessage(*message),
94*5293aa41SIngo Weinhold 	  fMessenger(),
95*5293aa41SIngo Weinhold 	  fHandler(handler)
96*5293aa41SIngo Weinhold {
97*5293aa41SIngo Weinhold }
98*5293aa41SIngo Weinhold 
99*5293aa41SIngo Weinhold // constructor
100*5293aa41SIngo Weinhold /*!	\brief Creates a new MessageEvent with a target BMessenger and a message
101*5293aa41SIngo Weinhold 		   command.
102*5293aa41SIngo Weinhold 	\param time The time at which the message shall be sent.
103*5293aa41SIngo Weinhold 	\param messenger The BMessenger specifying the target to which the message
104*5293aa41SIngo Weinhold 		   shall be delivered.
105*5293aa41SIngo Weinhold 	\param command The "what" field of the message to be sent.
106*5293aa41SIngo Weinhold */
107*5293aa41SIngo Weinhold MessageEvent::MessageEvent(bigtime_t time, const BMessenger& messenger,
108*5293aa41SIngo Weinhold 						   uint32 command)
109*5293aa41SIngo Weinhold 	: Event(time, true),
110*5293aa41SIngo Weinhold 	  fMessage(command),
111*5293aa41SIngo Weinhold 	  fMessenger(messenger),
112*5293aa41SIngo Weinhold 	  fHandler(NULL)
113*5293aa41SIngo Weinhold {
114*5293aa41SIngo Weinhold }
115*5293aa41SIngo Weinhold 
116*5293aa41SIngo Weinhold // constructor
117*5293aa41SIngo Weinhold /*!	\brief Creates a new MessageEvent with a target BMessenger and a message.
118*5293aa41SIngo Weinhold 
119*5293aa41SIngo Weinhold 	The caller retains ownership of the supplied message. It can savely be
120*5293aa41SIngo Weinhold 	deleted after the constructor returns.
121*5293aa41SIngo Weinhold 
122*5293aa41SIngo Weinhold 	\param time The time at which the message shall be sent.
123*5293aa41SIngo Weinhold 	\param messenger The BMessenger specifying the target to which the message
124*5293aa41SIngo Weinhold 		   shall be delivered.
125*5293aa41SIngo Weinhold 	\param message The message to be sent.
126*5293aa41SIngo Weinhold */
127*5293aa41SIngo Weinhold MessageEvent::MessageEvent(bigtime_t time, const BMessenger& messenger,
128*5293aa41SIngo Weinhold 						   const BMessage *message)
129*5293aa41SIngo Weinhold 	: Event(time, true),
130*5293aa41SIngo Weinhold 	  fMessage(*message),
131*5293aa41SIngo Weinhold 	  fMessenger(messenger),
132*5293aa41SIngo Weinhold 	  fHandler(NULL)
133*5293aa41SIngo Weinhold {
134*5293aa41SIngo Weinhold }
135*5293aa41SIngo Weinhold 
136*5293aa41SIngo Weinhold // destructor
137*5293aa41SIngo Weinhold /*!	\brief Frees all resources associated with the object.
138*5293aa41SIngo Weinhold */
139*5293aa41SIngo Weinhold MessageEvent::~MessageEvent()
140*5293aa41SIngo Weinhold {
141*5293aa41SIngo Weinhold }
142*5293aa41SIngo Weinhold 
143*5293aa41SIngo Weinhold // Do
144*5293aa41SIngo Weinhold /*!	\brief Hook method invoked when the event is executed.
145*5293aa41SIngo Weinhold 
146*5293aa41SIngo Weinhold 	Implements Event. Delivers the message to the target.
147*5293aa41SIngo Weinhold 
148*5293aa41SIngo Weinhold 	\param queue The event queue executing the event.
149*5293aa41SIngo Weinhold 	\return \c true, if the object shall be deleted, \c false otherwise.
150*5293aa41SIngo Weinhold */
151*5293aa41SIngo Weinhold bool
152*5293aa41SIngo Weinhold MessageEvent::Do(EventQueue *queue)
153*5293aa41SIngo Weinhold {
154*5293aa41SIngo Weinhold 	if (fHandler) {
155*5293aa41SIngo Weinhold 		if (BLooper* looper = fHandler->Looper())
156*5293aa41SIngo Weinhold 			looper->PostMessage(&fMessage, fHandler);
157*5293aa41SIngo Weinhold 	} else
158*5293aa41SIngo Weinhold 		fMessenger.SendMessage(&fMessage);
159*5293aa41SIngo Weinhold 	return false;
160*5293aa41SIngo Weinhold }
161*5293aa41SIngo Weinhold 
162