xref: /haiku/src/kits/app/Invoker.cpp (revision 1195f511e5e895673c6aa18bf4e731540edd67c0)
1*5edcfe96SAxel Dörfler /*
2*5edcfe96SAxel Dörfler  * Copyright 2001-2005, Haiku.
3*5edcfe96SAxel Dörfler  * Distributed under the terms of the MIT License.
4*5edcfe96SAxel Dörfler  *
5*5edcfe96SAxel Dörfler  * Authors:
6*5edcfe96SAxel Dörfler  *		Marc Flerackers (mflerackers@androme.be)
7*5edcfe96SAxel Dörfler  */
852a38012Sejakowatz 
952a38012Sejakowatz 
105c85a290Shaydentech #include <Invoker.h>
1152a38012Sejakowatz 
1252a38012Sejakowatz 
BInvoker(BMessage * message,BMessenger messenger)1319225ae1SMarc Flerackers BInvoker::BInvoker(BMessage* message, BMessenger messenger)
14*5edcfe96SAxel Dörfler 	:
15*5edcfe96SAxel Dörfler 	fMessage(message),
1619225ae1SMarc Flerackers 	fMessenger(messenger),
1752a38012Sejakowatz 	fReplyTo(NULL),
1819225ae1SMarc Flerackers 	fTimeout(B_INFINITE_TIMEOUT),
1919225ae1SMarc Flerackers 	fNotifyKind(0)
2052a38012Sejakowatz {
2152a38012Sejakowatz }
22*5edcfe96SAxel Dörfler 
23*5edcfe96SAxel Dörfler 
BInvoker(BMessage * message,const BHandler * handler,const BLooper * looper)2452a38012Sejakowatz BInvoker::BInvoker(BMessage* message, const BHandler* handler,
2552a38012Sejakowatz 	const BLooper* looper)
26*5edcfe96SAxel Dörfler 	:
27*5edcfe96SAxel Dörfler 	fMessage(message),
2852a38012Sejakowatz 	fMessenger(BMessenger(handler, looper)),
2952a38012Sejakowatz 	fReplyTo(NULL),
3019225ae1SMarc Flerackers 	fTimeout(B_INFINITE_TIMEOUT),
3119225ae1SMarc Flerackers 	fNotifyKind(0)
3252a38012Sejakowatz {
3352a38012Sejakowatz }
34*5edcfe96SAxel Dörfler 
35*5edcfe96SAxel Dörfler 
BInvoker()3619225ae1SMarc Flerackers BInvoker::BInvoker()
37*5edcfe96SAxel Dörfler 	:
38*5edcfe96SAxel Dörfler 	fMessage(NULL),
3952a38012Sejakowatz 	fReplyTo(NULL),
4019225ae1SMarc Flerackers 	fTimeout(B_INFINITE_TIMEOUT),
4119225ae1SMarc Flerackers 	fNotifyKind(0)
4252a38012Sejakowatz {
4352a38012Sejakowatz }
44*5edcfe96SAxel Dörfler 
45*5edcfe96SAxel Dörfler 
~BInvoker()4652a38012Sejakowatz BInvoker::~BInvoker()
4752a38012Sejakowatz {
4852a38012Sejakowatz 	delete fMessage;
4952a38012Sejakowatz }
50*5edcfe96SAxel Dörfler 
51*5edcfe96SAxel Dörfler 
52*5edcfe96SAxel Dörfler status_t
SetMessage(BMessage * message)53*5edcfe96SAxel Dörfler BInvoker::SetMessage(BMessage* message)
5452a38012Sejakowatz {
5519225ae1SMarc Flerackers 	if (fMessage == message)
5619225ae1SMarc Flerackers 		return B_OK;
5719225ae1SMarc Flerackers 
5852a38012Sejakowatz 	delete fMessage;
5952a38012Sejakowatz 	fMessage = message;
6019225ae1SMarc Flerackers 
6152a38012Sejakowatz 	return B_OK;
6252a38012Sejakowatz }
63*5edcfe96SAxel Dörfler 
64*5edcfe96SAxel Dörfler 
65*5edcfe96SAxel Dörfler BMessage*
Message() const66*5edcfe96SAxel Dörfler BInvoker::Message() const
6752a38012Sejakowatz {
6852a38012Sejakowatz 	return fMessage;
6952a38012Sejakowatz }
70*5edcfe96SAxel Dörfler 
71*5edcfe96SAxel Dörfler 
72*5edcfe96SAxel Dörfler uint32
Command() const73*5edcfe96SAxel Dörfler BInvoker::Command() const
7452a38012Sejakowatz {
7552a38012Sejakowatz 	if (fMessage)
7652a38012Sejakowatz 		return fMessage->what;
77*5edcfe96SAxel Dörfler 
7819225ae1SMarc Flerackers 	return 0;
7952a38012Sejakowatz }
80*5edcfe96SAxel Dörfler 
81*5edcfe96SAxel Dörfler 
82*5edcfe96SAxel Dörfler status_t
SetTarget(BMessenger messenger)83*5edcfe96SAxel Dörfler BInvoker::SetTarget(BMessenger messenger)
8452a38012Sejakowatz {
8552a38012Sejakowatz 	fMessenger = messenger;
8619225ae1SMarc Flerackers 	return B_OK;
8719225ae1SMarc Flerackers }
88*5edcfe96SAxel Dörfler 
89*5edcfe96SAxel Dörfler 
90*5edcfe96SAxel Dörfler status_t
SetTarget(const BHandler * handler,const BLooper * looper)91*5edcfe96SAxel Dörfler BInvoker::SetTarget(const BHandler* handler, const BLooper* looper)
9219225ae1SMarc Flerackers {
9319225ae1SMarc Flerackers 	fMessenger = BMessenger(handler, looper);
9419225ae1SMarc Flerackers 	return B_OK;
9552a38012Sejakowatz }
96*5edcfe96SAxel Dörfler 
97*5edcfe96SAxel Dörfler 
98*5edcfe96SAxel Dörfler bool
IsTargetLocal() const99*5edcfe96SAxel Dörfler BInvoker::IsTargetLocal() const
10052a38012Sejakowatz {
10152a38012Sejakowatz 	return fMessenger.IsTargetLocal();
10252a38012Sejakowatz }
103*5edcfe96SAxel Dörfler 
104*5edcfe96SAxel Dörfler 
105*5edcfe96SAxel Dörfler BHandler*
Target(BLooper ** _looper) const106*5edcfe96SAxel Dörfler BInvoker::Target(BLooper** _looper) const
10752a38012Sejakowatz {
108*5edcfe96SAxel Dörfler 	return fMessenger.Target(_looper);
10952a38012Sejakowatz }
110*5edcfe96SAxel Dörfler 
111*5edcfe96SAxel Dörfler 
112*5edcfe96SAxel Dörfler BMessenger
Messenger() const113*5edcfe96SAxel Dörfler BInvoker::Messenger() const
11452a38012Sejakowatz {
11552a38012Sejakowatz 	return fMessenger;
11652a38012Sejakowatz }
117*5edcfe96SAxel Dörfler 
118*5edcfe96SAxel Dörfler 
119*5edcfe96SAxel Dörfler status_t
SetHandlerForReply(BHandler * replyHandler)120*5edcfe96SAxel Dörfler BInvoker::SetHandlerForReply(BHandler* replyHandler)
12152a38012Sejakowatz {
12219225ae1SMarc Flerackers 	fReplyTo = replyHandler;
12352a38012Sejakowatz 	return B_OK;
12452a38012Sejakowatz }
125*5edcfe96SAxel Dörfler 
126*5edcfe96SAxel Dörfler 
127*5edcfe96SAxel Dörfler BHandler*
HandlerForReply() const128*5edcfe96SAxel Dörfler BInvoker::HandlerForReply() const
12952a38012Sejakowatz {
13052a38012Sejakowatz 	return fReplyTo;
13152a38012Sejakowatz }
132*5edcfe96SAxel Dörfler 
133*5edcfe96SAxel Dörfler 
134*5edcfe96SAxel Dörfler status_t
Invoke(BMessage * message)135*5edcfe96SAxel Dörfler BInvoker::Invoke(BMessage* message)
13652a38012Sejakowatz {
13719225ae1SMarc Flerackers 	if (!message)
13819225ae1SMarc Flerackers 		message = Message();
13919225ae1SMarc Flerackers 
14019225ae1SMarc Flerackers 	if (!message)
14119225ae1SMarc Flerackers 		return B_BAD_VALUE;
14219225ae1SMarc Flerackers 
14319225ae1SMarc Flerackers 	return fMessenger.SendMessage(message, fReplyTo, fTimeout);
14452a38012Sejakowatz }
145*5edcfe96SAxel Dörfler 
146*5edcfe96SAxel Dörfler 
147*5edcfe96SAxel Dörfler status_t
InvokeNotify(BMessage * message,uint32 kind)148*5edcfe96SAxel Dörfler BInvoker::InvokeNotify(BMessage* message, uint32 kind)
14952a38012Sejakowatz {
15019225ae1SMarc Flerackers 	if (fNotifyKind != 0)
15119225ae1SMarc Flerackers 		return B_WOULD_BLOCK;
15252a38012Sejakowatz 
15319225ae1SMarc Flerackers 	BeginInvokeNotify(kind);
15419225ae1SMarc Flerackers 	status_t err = Invoke(message);
15519225ae1SMarc Flerackers 	EndInvokeNotify();
15652a38012Sejakowatz 
15752a38012Sejakowatz 	return err;
15852a38012Sejakowatz }
159*5edcfe96SAxel Dörfler 
160*5edcfe96SAxel Dörfler 
161*5edcfe96SAxel Dörfler status_t
SetTimeout(bigtime_t timeout)162*5edcfe96SAxel Dörfler BInvoker::SetTimeout(bigtime_t timeout)
16352a38012Sejakowatz {
16452a38012Sejakowatz 	fTimeout = timeout;
16552a38012Sejakowatz 	return B_OK;
16652a38012Sejakowatz }
167*5edcfe96SAxel Dörfler 
168*5edcfe96SAxel Dörfler 
169*5edcfe96SAxel Dörfler bigtime_t
Timeout() const170*5edcfe96SAxel Dörfler BInvoker::Timeout() const
17152a38012Sejakowatz {
17252a38012Sejakowatz 	return fTimeout;
17352a38012Sejakowatz }
174*5edcfe96SAxel Dörfler 
175*5edcfe96SAxel Dörfler 
176*5edcfe96SAxel Dörfler uint32
InvokeKind(bool * _notify)177*5edcfe96SAxel Dörfler BInvoker::InvokeKind(bool* _notify)
17852a38012Sejakowatz {
179*5edcfe96SAxel Dörfler 	if (_notify)
180*5edcfe96SAxel Dörfler 		*_notify = fNotifyKind != 0;
18152a38012Sejakowatz 
18219225ae1SMarc Flerackers 	if (fNotifyKind != 0)
18352a38012Sejakowatz 		return fNotifyKind;
184*5edcfe96SAxel Dörfler 
18519225ae1SMarc Flerackers 	return B_CONTROL_INVOKED;
18652a38012Sejakowatz }
187*5edcfe96SAxel Dörfler 
188*5edcfe96SAxel Dörfler 
189*5edcfe96SAxel Dörfler void
BeginInvokeNotify(uint32 kind)190*5edcfe96SAxel Dörfler BInvoker::BeginInvokeNotify(uint32 kind)
19152a38012Sejakowatz {
19252a38012Sejakowatz 	fNotifyKind = kind;
19352a38012Sejakowatz }
194*5edcfe96SAxel Dörfler 
195*5edcfe96SAxel Dörfler 
196*5edcfe96SAxel Dörfler void
EndInvokeNotify()197*5edcfe96SAxel Dörfler BInvoker::EndInvokeNotify()
19852a38012Sejakowatz {
19919225ae1SMarc Flerackers 	fNotifyKind = 0;
20052a38012Sejakowatz }
201*5edcfe96SAxel Dörfler 
202*5edcfe96SAxel Dörfler 
_ReservedInvoker1()20319225ae1SMarc Flerackers void BInvoker::_ReservedInvoker1() {}
_ReservedInvoker2()20419225ae1SMarc Flerackers void BInvoker::_ReservedInvoker2() {}
_ReservedInvoker3()20519225ae1SMarc Flerackers void BInvoker::_ReservedInvoker3() {}
206*5edcfe96SAxel Dörfler 
207*5edcfe96SAxel Dörfler 
BInvoker(const BInvoker &)20852a38012Sejakowatz BInvoker::BInvoker(const BInvoker &)
20952a38012Sejakowatz {
21052a38012Sejakowatz }
211*5edcfe96SAxel Dörfler 
212*5edcfe96SAxel Dörfler 
213*5edcfe96SAxel Dörfler BInvoker &
operator =(const BInvoker &)214*5edcfe96SAxel Dörfler BInvoker::operator=(const BInvoker &)
21552a38012Sejakowatz {
21652a38012Sejakowatz 	return *this;
21752a38012Sejakowatz }
218*5edcfe96SAxel Dörfler 
219