mirror of
https://review.haiku-os.org/haiku
synced 2025-02-03 12:16:35 +01:00
52a3801208
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10 a95241bf-73f2-0310-859d-f6bbb57e9c96
85 lines
1.7 KiB
C++
85 lines
1.7 KiB
C++
#include <OS.h>
|
|
#include <Messenger.h>
|
|
#include <Autolock.h>
|
|
#include <stdio.h>
|
|
#include "AppManager.h"
|
|
|
|
AppManager::AppManager()
|
|
{
|
|
}
|
|
|
|
AppManager::~AppManager()
|
|
{
|
|
}
|
|
|
|
bool AppManager::HasTeam(team_id team)
|
|
{
|
|
BAutolock lock(mLocker);
|
|
ListItem *item;
|
|
for (int32 i = 0; (item = (ListItem *)mList.ItemAt(i)) != NULL; i++)
|
|
if (item->team == team)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
status_t AppManager::RegisterTeam(team_id team, BMessenger messenger)
|
|
{
|
|
printf("AppManager::RegisterTeam %d\n",(int) team);
|
|
|
|
BAutolock lock(mLocker);
|
|
ListItem *item;
|
|
|
|
if (HasTeam(team))
|
|
return B_ERROR;
|
|
|
|
item = new ListItem;
|
|
item->team = team;
|
|
item->messenger = messenger;
|
|
|
|
return mList.AddItem(item) ? B_OK : B_ERROR;
|
|
}
|
|
|
|
status_t AppManager::UnregisterTeam(team_id team)
|
|
{
|
|
printf("AppManager::UnregisterTeam %d\n",(int) team);
|
|
|
|
BAutolock lock(mLocker);
|
|
ListItem *item;
|
|
for (int32 i = 0; (item = (ListItem *)mList.ItemAt(i)) != NULL; i++)
|
|
if (item->team == team) {
|
|
if (mList.RemoveItem(item)) {
|
|
delete item;
|
|
return B_OK;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
return B_ERROR;
|
|
}
|
|
|
|
void AppManager::BroadcastMessage(BMessage *msg, bigtime_t timeout)
|
|
{
|
|
BAutolock lock(mLocker);
|
|
ListItem *item;
|
|
for (int32 i = 0; (item = (ListItem *)mList.ItemAt(i)) != NULL; i++)
|
|
if (B_OK != item->messenger.SendMessage(msg,(BHandler *)NULL,timeout))
|
|
HandleBroadcastError(msg, item->messenger, item->team, timeout);
|
|
}
|
|
|
|
void AppManager::HandleBroadcastError(BMessage *msg, BMessenger &, team_id team, bigtime_t timeout)
|
|
{
|
|
BAutolock lock(mLocker);
|
|
printf("error broadcasting team %d with message after %.3f seconds\n",int(team),timeout / 1000000.0);
|
|
msg->PrintToStream();
|
|
}
|
|
|
|
status_t AppManager::LoadState()
|
|
{
|
|
return B_ERROR;
|
|
}
|
|
|
|
status_t AppManager::SaveState()
|
|
{
|
|
return B_ERROR;
|
|
}
|