1f9fd58ccSIngo Weinhold //------------------------------------------------------------------------------ 2f9fd58ccSIngo Weinhold // Copyright (c) 2001-2002, OpenBeOS 3f9fd58ccSIngo Weinhold // 4f9fd58ccSIngo Weinhold // Permission is hereby granted, free of charge, to any person obtaining a 5f9fd58ccSIngo Weinhold // copy of this software and associated documentation files (the "Software"), 6f9fd58ccSIngo Weinhold // to deal in the Software without restriction, including without limitation 7f9fd58ccSIngo Weinhold // the rights to use, copy, modify, merge, publish, distribute, sublicense, 8f9fd58ccSIngo Weinhold // and/or sell copies of the Software, and to permit persons to whom the 9f9fd58ccSIngo Weinhold // Software is furnished to do so, subject to the following conditions: 10f9fd58ccSIngo Weinhold // 11f9fd58ccSIngo Weinhold // The above copyright notice and this permission notice shall be included in 12f9fd58ccSIngo Weinhold // all copies or substantial portions of the Software. 13f9fd58ccSIngo Weinhold // 14f9fd58ccSIngo Weinhold // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15f9fd58ccSIngo Weinhold // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16f9fd58ccSIngo Weinhold // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17f9fd58ccSIngo Weinhold // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18f9fd58ccSIngo Weinhold // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19f9fd58ccSIngo Weinhold // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20f9fd58ccSIngo Weinhold // DEALINGS IN THE SOFTWARE. 21f9fd58ccSIngo Weinhold // 22f9fd58ccSIngo Weinhold // File Name: TRoster.h 23f9fd58ccSIngo Weinhold // Author: Ingo Weinhold (bonefish@users.sf.net) 24f9fd58ccSIngo Weinhold // Description: TRoster is the incarnation of The Roster. It manages the 25f9fd58ccSIngo Weinhold // running applications. 26f9fd58ccSIngo Weinhold //------------------------------------------------------------------------------ 27f9fd58ccSIngo Weinhold 28f9fd58ccSIngo Weinhold #ifndef T_ROSTER_H 29f9fd58ccSIngo Weinhold #define T_ROSTER_H 30f9fd58ccSIngo Weinhold 311d32138dSIngo Weinhold #include <map> 321d32138dSIngo Weinhold 33f9fd58ccSIngo Weinhold #include <SupportDefs.h> 34f9fd58ccSIngo Weinhold 35f9fd58ccSIngo Weinhold #include "AppInfoList.h" 36f9fd58ccSIngo Weinhold 37f9fd58ccSIngo Weinhold class BMessage; 38f9fd58ccSIngo Weinhold 391d32138dSIngo Weinhold struct IAPRRequest { 401d32138dSIngo Weinhold entry_ref ref; 411d32138dSIngo Weinhold team_id team; 421d32138dSIngo Weinhold BMessage *request; 431d32138dSIngo Weinhold }; 441d32138dSIngo Weinhold 451d32138dSIngo Weinhold typedef map<team_id, IAPRRequest> IAPRRequestMap; 461d32138dSIngo Weinhold 47f9fd58ccSIngo Weinhold // For strategic reasons, as TRoster appears in the BMessenger header. 48f9fd58ccSIngo Weinhold namespace BPrivate { 49f9fd58ccSIngo Weinhold 50f9fd58ccSIngo Weinhold class TRoster { 51f9fd58ccSIngo Weinhold public: 52f9fd58ccSIngo Weinhold TRoster(); 53f9fd58ccSIngo Weinhold virtual ~TRoster(); 54f9fd58ccSIngo Weinhold 551d32138dSIngo Weinhold void HandleAddApplication(BMessage *request); 561d32138dSIngo Weinhold void HandleCompleteRegistration(BMessage *request); 571d32138dSIngo Weinhold void HandleIsAppPreRegistered(BMessage *request); 581d32138dSIngo Weinhold void HandleRemovePreRegApp(BMessage *request); 591d32138dSIngo Weinhold void HandleRemoveApp(BMessage *request); 601d32138dSIngo Weinhold void HandleSetThreadAndTeam(BMessage *request); 61af8eec40SIngo Weinhold void HandleSetSignature(BMessage *request); 62a12aef2bSIngo Weinhold void HandleGetAppInfo(BMessage *request); 63a12aef2bSIngo Weinhold void HandleGetAppList(BMessage *request); 64a12aef2bSIngo Weinhold void HandleActivateApp(BMessage *request); 65a12aef2bSIngo Weinhold 665e949b7dSIngo Weinhold status_t Init(); 675e949b7dSIngo Weinhold 68a12aef2bSIngo Weinhold status_t AddApp(RosterAppInfo *info); 69a12aef2bSIngo Weinhold void RemoveApp(RosterAppInfo *info); 70a12aef2bSIngo Weinhold void ActivateApp(RosterAppInfo *info); 71f9fd58ccSIngo Weinhold 72*b48b6fb5SIngo Weinhold void CheckSanity(); 73*b48b6fb5SIngo Weinhold 74f9fd58ccSIngo Weinhold private: 75a12aef2bSIngo Weinhold // hook functions 76a12aef2bSIngo Weinhold void _AppAdded(RosterAppInfo *info); 77a12aef2bSIngo Weinhold void _AppRemoved(RosterAppInfo *info); 78a12aef2bSIngo Weinhold void _AppActivated(RosterAppInfo *info); 79a12aef2bSIngo Weinhold void _AppDeactivated(RosterAppInfo *info); 80a12aef2bSIngo Weinhold 81a12aef2bSIngo Weinhold // helper functions 821d32138dSIngo Weinhold static status_t _AddMessageAppInfo(BMessage *message, 831d32138dSIngo Weinhold const app_info *info); 841d32138dSIngo Weinhold uint32 _NextToken(); 851d32138dSIngo Weinhold void _ReplyToIAPRRequest(BMessage *request, const RosterAppInfo *info); 861d32138dSIngo Weinhold 871d32138dSIngo Weinhold private: 881d32138dSIngo Weinhold AppInfoList fRegisteredApps; 891d32138dSIngo Weinhold AppInfoList fEarlyPreRegisteredApps; 901d32138dSIngo Weinhold IAPRRequestMap fIAPRRequests; 91a12aef2bSIngo Weinhold RosterAppInfo *fActiveApp; 921d32138dSIngo Weinhold uint32 fLastToken; 93f9fd58ccSIngo Weinhold }; 94f9fd58ccSIngo Weinhold 95f9fd58ccSIngo Weinhold }; // namespace BPrivate 96f9fd58ccSIngo Weinhold 97f9fd58ccSIngo Weinhold // Only the registrar code uses this header. No need to hide TRoster in the 98f9fd58ccSIngo Weinhold // namespace. 99f9fd58ccSIngo Weinhold using BPrivate::TRoster; 100f9fd58ccSIngo Weinhold 101f9fd58ccSIngo Weinhold #endif // T_ROSTER_H 102