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:
@@ -128,6 +128,9 @@ Registrar::MessageReceived(BMessage *message)
|
|||||||
case B_REG_ACTIVATE_APP:
|
case B_REG_ACTIVATE_APP:
|
||||||
fRoster->HandleActivateApp(message);
|
fRoster->HandleActivateApp(message);
|
||||||
break;
|
break;
|
||||||
|
case B_REG_BROADCAST:
|
||||||
|
fRoster->HandleBroadcast(message);
|
||||||
|
break;
|
||||||
// message runner requests
|
// message runner requests
|
||||||
case B_REG_REGISTER_MESSAGE_RUNNER:
|
case B_REG_REGISTER_MESSAGE_RUNNER:
|
||||||
fMessageRunnerManager->HandleRegisterRunner(message);
|
fMessageRunnerManager->HandleRegisterRunner(message);
|
||||||
|
|||||||
@@ -637,6 +637,54 @@ TRoster::HandleActivateApp(BMessage *request)
|
|||||||
FUNCTION_END();
|
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
|
// Init
|
||||||
/*! \brief Initializes the roster.
|
/*! \brief Initializes the roster.
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ public:
|
|||||||
void HandleGetAppInfo(BMessage *request);
|
void HandleGetAppInfo(BMessage *request);
|
||||||
void HandleGetAppList(BMessage *request);
|
void HandleGetAppList(BMessage *request);
|
||||||
void HandleActivateApp(BMessage *request);
|
void HandleActivateApp(BMessage *request);
|
||||||
|
void HandleBroadcast(BMessage *request);
|
||||||
|
|
||||||
status_t Init();
|
status_t Init();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user