#include "SMInvoker.h"
#include "SMMessages.h"
SMInvoker::SMInvoker()
: fReplyMessage(NULL)
{
}
SMInvoker::~SMInvoker()
{
delete fReplyMessage;
}
bool
SMInvoker::ReplySuccess()
{
return (fReplyMessage && fReplyMessage->what == MSG_REPLY);
}
bool
SMInvoker::DirectReply()
{
return fReplyMessage;
}
SMInvoker1::SMInvoker1(bool useReplyTo)
: SMInvoker(),
fUseReplyTo(useReplyTo)
{
}
status_t
SMInvoker1::Invoke(BMessenger &target, BHandler *replyHandler,
BMessenger &replyMessenger)
{
BHandler *replyTo = (fUseReplyTo ? replyHandler : NULL);
status_t result = target.SendMessage(MSG_TEST, replyTo);
return result;
}
SMInvoker2::SMInvoker2(bool useMessage, bool useReplyTo, bigtime_t timeout)
: SMInvoker(),
fUseMessage(useMessage),
fUseReplyTo(useReplyTo),
fTimeout(timeout)
{
}
status_t
SMInvoker2::Invoke(BMessenger &target, BHandler *replyHandler,
BMessenger &replyMessenger)
{
BHandler *replyTo = (fUseReplyTo ? replyHandler : NULL);
BMessage _message(MSG_TEST);
BMessage *message = (fUseMessage ? &_message : NULL);
status_t result = target.SendMessage(message, replyTo, fTimeout);
return result;
}
SMInvoker3::SMInvoker3(bool useMessage, bool useReplyTo, bigtime_t timeout)
: SMInvoker(),
fUseMessage(useMessage),
fUseReplyTo(useReplyTo),
fTimeout(timeout)
{
}
status_t
SMInvoker3::Invoke(BMessenger &target, BHandler *replyHandler,
BMessenger &replyMessenger)
{
BMessenger badMessenger;
BMessenger &replyTo = (fUseReplyTo ? replyMessenger : badMessenger);
BMessage _message(MSG_TEST);
BMessage *message = (fUseMessage ? &_message : NULL);
status_t result = target.SendMessage(message, replyTo, fTimeout);
return result;
}
SMInvoker4::SMInvoker4(bool useReply)
: SMInvoker(),
fUseReply(useReply)
{
}
status_t
SMInvoker4::Invoke(BMessenger &target, BHandler *replyHandler,
BMessenger &replyMessenger)
{
if (fUseReply)
fReplyMessage = new BMessage(uint32(0));
status_t result = target.SendMessage(MSG_TEST, fReplyMessage);
return result;
}
SMInvoker5::SMInvoker5(bool useMessage, bool useReply,
bigtime_t deliveryTimeout, bigtime_t replyTimeout)
: SMInvoker(),
fUseMessage(useMessage),
fUseReply(useReply),
fDeliveryTimeout(deliveryTimeout),
fReplyTimeout(replyTimeout)
{
}
status_t
SMInvoker5::Invoke(BMessenger &target, BHandler *replyHandler,
BMessenger &replyMessenger)
{
if (fUseReply)
fReplyMessage = new BMessage(uint32(0));
BMessage _message(MSG_TEST);
BMessage *message = (fUseMessage ? &_message : NULL);
status_t result = target.SendMessage(message, fReplyMessage,
fDeliveryTimeout, fReplyTimeout);
return result;
}