xref: /haiku/src/servers/registrar/TRoster.h (revision 220d04022750f40f8bac8f01fa551211e28d04f2)
1 /*
2  * Copyright 2001-2007, Ingo Weinhold, bonefish@users.sf.net.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef T_ROSTER_H
6 #define T_ROSTER_H
7 
8 
9 #include "AppInfoList.h"
10 #include "RecentApps.h"
11 #include "RecentEntries.h"
12 #include "WatchingService.h"
13 
14 #include <Locker.h>
15 #include <MessageQueue.h>
16 #include <Path.h>
17 #include <Roster.h>
18 #include <SupportDefs.h>
19 
20 #include <hash_set>
21 #include <map>
22 
23 
24 #if __GNUC__ >= 4
25 using __gnu_cxx::hash_set;
26 #endif
27 
28 using std::map;
29 
30 class BMessage;
31 class WatchingService;
32 
33 typedef map<int32, BMessageQueue*>	IARRequestMap;
34 
35 class TRoster {
36 public:
37 							TRoster();
38 	virtual					~TRoster();
39 
40 			void			HandleAddApplication(BMessage* request);
41 			void			HandleCompleteRegistration(BMessage* request);
42 			void			HandleIsAppRegistered(BMessage* request);
43 			void			HandleRemovePreRegApp(BMessage* request);
44 			void			HandleRemoveApp(BMessage* request);
45 			void			HandleSetThreadAndTeam(BMessage* request);
46 			void			HandleSetSignature(BMessage* request);
47 			void			HandleGetAppInfo(BMessage* request);
48 			void			HandleGetAppList(BMessage* request);
49 			void			HandleUpdateActiveApp(BMessage* request);
50 			void			HandleBroadcast(BMessage* request);
51 			void			HandleStartWatching(BMessage* request);
52 			void			HandleStopWatching(BMessage* request);
53 			void			HandleGetRecentDocuments(BMessage* request);
54 			void			HandleGetRecentFolders(BMessage* request);
55 			void			HandleGetRecentApps(BMessage* request);
56 			void			HandleAddToRecentDocuments(BMessage* request);
57 			void			HandleAddToRecentFolders(BMessage* request);
58 			void			HandleAddToRecentApps(BMessage* request);
59 			void			HandleLoadRecentLists(BMessage* request);
60 			void			HandleSaveRecentLists(BMessage* request);
61 
62 			void			HandleRestartAppServer(BMessage* request);
63 
64 			void			ClearRecentDocuments();
65 			void			ClearRecentFolders();
66 			void			ClearRecentApps();
67 
68 			status_t		Init();
69 
70 			status_t		AddApp(RosterAppInfo* info);
71 			void			RemoveApp(RosterAppInfo* info);
72 			void			UpdateActiveApp(RosterAppInfo* info);
73 
74 			void			CheckSanity();
75 
76 			void			SetShuttingDown(bool shuttingDown);
77 			status_t		GetShutdownApps(AppInfoList& userApps,
78 								AppInfoList& systemApps,
79 								AppInfoList& backgroundApps,
80 								hash_set<team_id>& vitalSystemApps);
81 
82 			status_t		AddWatcher(Watcher* watcher);
83 			void			RemoveWatcher(Watcher* watcher);
84 
85 private:
86 	// hook functions
87 			void			_AppAdded(RosterAppInfo* info);
88 			void			_AppRemoved(RosterAppInfo* info);
89 			void			_AppActivated(RosterAppInfo* info);
90 			void			_AppDeactivated(RosterAppInfo* info);
91 
92 	// helper functions
93 	static	status_t		_AddMessageAppInfo(BMessage* message,
94 								const app_info* info);
95 	static	status_t		_AddMessageWatchingInfo(BMessage* message,
96 								const app_info* info);
97 			uint32			_NextToken();
98 
99 			void			_AddIARRequest(IARRequestMap& map, int32 key,
100 								BMessage* request);
101 			void			_ReplyToIARRequests(BMessageQueue* requests,
102 								const RosterAppInfo* info);
103 			void			_ReplyToIARRequest(BMessage* request,
104 								const RosterAppInfo* info);
105 
106 			void			_HandleGetRecentEntries(BMessage* request);
107 
108 			void			_ValidateRunning(const entry_ref& ref,
109 								const char* signature);
110 			bool			_IsSystemApp(RosterAppInfo* info) const;
111 
112 			status_t		_LoadRosterSettings(const char* path = NULL);
113 			status_t		_SaveRosterSettings(const char* path = NULL);
114 	static	const char*		kDefaultRosterSettingsFile;
115 
116 private:
117 			BLocker			fLock;
118 			AppInfoList		fRegisteredApps;
119 			AppInfoList		fEarlyPreRegisteredApps;
120 			IARRequestMap	fIARRequestsByID;
121 			IARRequestMap	fIARRequestsByToken;
122 			RosterAppInfo*	fActiveApp;
123 			WatchingService	fWatchingService;
124 			RecentApps		fRecentApps;
125 			RecentEntries	fRecentDocuments;
126 			RecentEntries	fRecentFolders;
127 			uint32			fLastToken;
128 			bool			fShuttingDown;
129 			BPath			fSystemAppPath;
130 			BPath			fSystemServerPath;
131 };
132 
133 #endif	// T_ROSTER_H
134