root/src/tests/kits/app/bmessenger/SMInvoker.cpp
// SMInvoker.cpp

#include "SMInvoker.h"
#include "SMMessages.h"

// SMInvoker

// constructor
SMInvoker::SMInvoker()
                 : fReplyMessage(NULL)
{
}

// destructor
SMInvoker::~SMInvoker()
{
        delete fReplyMessage;
}

// ReplySuccess
bool
SMInvoker::ReplySuccess()
{
        return (fReplyMessage && fReplyMessage->what == MSG_REPLY);
}

// DirectReply
bool
SMInvoker::DirectReply()
{
        return fReplyMessage;
}


// SMInvoker1

// constructor
SMInvoker1::SMInvoker1(bool useReplyTo)
                  : SMInvoker(),
                        fUseReplyTo(useReplyTo)
{
}

// Invoke
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

// constructor
SMInvoker2::SMInvoker2(bool useMessage, bool useReplyTo, bigtime_t timeout)
                  : SMInvoker(),
                        fUseMessage(useMessage),
                        fUseReplyTo(useReplyTo),
                        fTimeout(timeout)
{
}

// Invoke
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

// constructor
SMInvoker3::SMInvoker3(bool useMessage, bool useReplyTo, bigtime_t timeout)
                  : SMInvoker(),
                        fUseMessage(useMessage),
                        fUseReplyTo(useReplyTo),
                        fTimeout(timeout)
{
}

// Invoke
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

// constructor
SMInvoker4::SMInvoker4(bool useReply)
                  : SMInvoker(),
                        fUseReply(useReply)
{
}

// Invoke
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

// constructor
SMInvoker5::SMInvoker5(bool useMessage, bool useReply,
                                           bigtime_t deliveryTimeout, bigtime_t replyTimeout)
                  : SMInvoker(),
                        fUseMessage(useMessage),
                        fUseReply(useReply),
                        fDeliveryTimeout(deliveryTimeout),
                        fReplyTimeout(replyTimeout)
{
}

// Invoke
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;
}