status_t AddOnManager::_GetReplicantView(BMessenger target, int32 uid, BMessage* reply) const { // We send a message to the target shelf, asking it for the Name of the // replicant with the given unique id. BMessage request(B_GET_PROPERTY); BMessage uid_specifier(B_ID_SPECIFIER); // specifying via ID status_t err; status_t e; request.AddSpecifier("View"); // ask for the Name of the replicant // IDs are specified using code like the following 3 lines: uid_specifier.AddInt32("id", uid); uid_specifier.AddString("property", "Replicant"); request.AddSpecifier(&uid_specifier); if ((err = target.SendMessage(&request, reply)) != B_OK) return err; if (((err = reply->FindInt32("error", &e)) != B_OK) || (e != B_OK)) return err ? err : e; return B_OK; }
status_t SendMessageToReplicant(int32 index, BMessage *msg) { BMessage aReply; status_t aErr = B_OK; msg->AddInt32( "what2", msg->what ); msg->what = B_SET_PROPERTY; BMessage uid_specifier(B_ID_SPECIFIER); msg->AddSpecifier("View"); uid_specifier.AddInt32("id", index); uid_specifier.AddString("property", "Replicant"); msg->AddSpecifier(&uid_specifier); aErr = GetMessenger().SendMessage( msg, (BHandler*)NULL, 1000000 ); return aErr; }