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:
parent
8c7ccd0bda
commit
56d4d6378e
@ -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);
|
||||
|
@ -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.
|
||||
|
||||
|
@ -62,6 +62,7 @@ public:
|
||||
void HandleGetAppInfo(BMessage *request);
|
||||
void HandleGetAppList(BMessage *request);
|
||||
void HandleActivateApp(BMessage *request);
|
||||
void HandleBroadcast(BMessage *request);
|
||||
|
||||
status_t Init();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user