Added handling for broadcast request (BRoster::Broadcast()).

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1542 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2002-10-15 22:31:55 +00:00
parent 8c7ccd0bda
commit 56d4d6378e
3 changed files with 52 additions and 0 deletions

View File

@ -128,6 +128,9 @@ Registrar::MessageReceived(BMessage *message)
case B_REG_ACTIVATE_APP:
fRoster->HandleActivateApp(message);
break;
case B_REG_BROADCAST:
fRoster->HandleBroadcast(message);
break;
// message runner requests
case B_REG_REGISTER_MESSAGE_RUNNER:
fMessageRunnerManager->HandleRegisterRunner(message);

View File

@ -637,6 +637,54 @@ TRoster::HandleActivateApp(BMessage *request)
FUNCTION_END();
}
// HandleBroadcast
/*! \brief Handles a Broadcast() request.
\param request The request message
*/
void
TRoster::HandleBroadcast(BMessage *request)
{
FUNCTION_START();
status_t error = B_OK;
// get the parameters
team_id team;
BMessage message;
BMessenger replyTarget;
if (request->FindInt32("team", &team) != B_OK)
team = -1;
if (error == B_OK && request->FindMessage("message", &message) != B_OK)
error = B_BAD_VALUE;
if (error == B_OK
&& request->FindMessenger("reply_target", &replyTarget) != B_OK) {
error = B_BAD_VALUE;
}
// reply to the request -- do this first, don't let the inquirer wait
if (error == B_OK) {
BMessage reply(B_REG_SUCCESS);
request->SendReply(&reply);
} else {
BMessage reply(B_REG_ERROR);
reply.AddInt32("error", error);
request->SendReply(&reply);
}
// broadcast the message
team_id registrarTeam = BPrivate::current_team();
if (error == B_OK) {
for (AppInfoList::Iterator it = fRegisteredApps.It();
it.IsValid();
++it) {
// don't send the message to the requesting team or the registrar
if ((*it)->team != team && (*it)->team != registrarTeam) {
BMessenger messenger((*it)->team, (*it)->port, 0, true);
messenger.SendMessage(&message, replyTarget, 0);
}
}
}
FUNCTION_END();
}
// Init
/*! \brief Initializes the roster.

View File

@ -62,6 +62,7 @@ public:
void HandleGetAppInfo(BMessage *request);
void HandleGetAppList(BMessage *request);
void HandleActivateApp(BMessage *request);
void HandleBroadcast(BMessage *request);
status_t Init();