diff --git a/src/tests/kits/app/broster/LaunchTesterHelper.cpp b/src/tests/kits/app/broster/LaunchTesterHelper.cpp index eacde0d987..8f88dd9302 100644 --- a/src/tests/kits/app/broster/LaunchTesterHelper.cpp +++ b/src/tests/kits/app/broster/LaunchTesterHelper.cpp @@ -251,6 +251,10 @@ LaunchContext::HandleMessage(BMessage *message) case MSG_MESSAGE_RECEIVED: case MSG_QUIT_REQUESTED: case MSG_READY_TO_RUN: + case MSG_1: + case MSG_2: + case MSG_3: + case MSG_REPLY: { BMessenger messenger = message->ReturnAddress(); // add the message to the respective team's message list @@ -258,9 +262,12 @@ LaunchContext::HandleMessage(BMessage *message) // remote team. The R5 registrar seems to send a B_REPLY message // sometimes. team_id sender = -1; + bool dontIgnore = false; if (message->FindInt32("sender", &sender) != B_OK || sender == be_app->Team() - || sender == messenger.Team()) { + || sender == messenger.Team() + || (message->FindBool("don't ignore", &dontIgnore) == B_OK) + && dontIgnore) { AppInfo *info = CreateAppInfo(messenger); info->AddMessage(*message); if (fTerminating) @@ -335,6 +342,11 @@ LaunchContext::CheckNextMessage(LaunchCaller &caller, team_id team, int32 &cookie, uint32 what) { BMessage *message = NextMessageFrom(team, cookie); +if (!message) +printf("LaunchContext::CheckNextMessage(): no more messages\n"); +else if (message->what != what) +printf("LaunchContext::CheckNextMessage(): %.4s vs %.4s\n", +(char*)&message->what, (char*)&what); return (message && message->what == what); } @@ -715,11 +727,17 @@ LaunchContext::NotifySleepers(uint32 messageCode) // constructor RosterLaunchApp::RosterLaunchApp(const char *signature) : BApplication(signature), - fMessageQueue(), - fLaunchContext(NULL) + fLaunchContext(NULL), + fHandler(NULL) { } +// destructor +RosterLaunchApp::~RosterLaunchApp() +{ + SetHandler(NULL); +} + // MessageReceived void RosterLaunchApp::MessageReceived(BMessage *message) @@ -728,13 +746,6 @@ RosterLaunchApp::MessageReceived(BMessage *message) fLaunchContext->HandleMessage(message); } -// MessageQueue -BMessageQueue& -RosterLaunchApp::MessageQueue() -{ - return fMessageQueue; -} - // SetLaunchContext void RosterLaunchApp::SetLaunchContext(LaunchContext *context) @@ -749,3 +760,41 @@ RosterLaunchApp::GetLaunchContext() const return fLaunchContext; } +// SetHandler +void +RosterLaunchApp::SetHandler(BHandler *handler) +{ + Lock(); + if (fHandler) { + RemoveHandler(fHandler); + delete fHandler; + fHandler = NULL; + } + if (handler) { + fHandler = handler; + AddHandler(handler); + } + Unlock(); +} + + +////////////////////////// +// RosterBroadcastHandler + +// constructor +RosterBroadcastHandler::RosterBroadcastHandler() +{ +} + +// MessageReceived +void +RosterBroadcastHandler::MessageReceived(BMessage *message) +{ + RosterLaunchApp *app = dynamic_cast(be_app); + if (LaunchContext *launchContext = app->GetLaunchContext()) { + message->AddInt32("original what", (int32)message->what); + message->what = MSG_REPLY; + launchContext->HandleMessage(message); + } +} + diff --git a/src/tests/kits/app/broster/LaunchTesterHelper.h b/src/tests/kits/app/broster/LaunchTesterHelper.h index 329b4680c6..85bb94f648 100644 --- a/src/tests/kits/app/broster/LaunchTesterHelper.h +++ b/src/tests/kits/app/broster/LaunchTesterHelper.h @@ -9,12 +9,6 @@ #include #include -enum { - MSG_1 = 'msg1', - MSG_2 = 'msg2', - MSG_3 = 'msg3', -}; - // LaunchCaller class LaunchCaller { public: @@ -138,17 +132,27 @@ private: class RosterLaunchApp : public BApplication { public: RosterLaunchApp(const char *signature); + ~RosterLaunchApp(); virtual void MessageReceived(BMessage *message); - BMessageQueue &MessageQueue(); - void SetLaunchContext(LaunchContext *context); LaunchContext *GetLaunchContext() const; + BHandler *Handler() { return fHandler; } + void SetHandler(BHandler *handler); + private: - BMessageQueue fMessageQueue; LaunchContext *fLaunchContext; + BHandler *fHandler; +}; + +// RosterBroadcastHandler +class RosterBroadcastHandler : public BHandler { +public: + RosterBroadcastHandler(); + + virtual void MessageReceived(BMessage *message); }; #endif // LAUNCH_TESTER_HELPER_H