xref: /haiku/src/tests/apps/fake_app_server/AppServer.h (revision bd3c41fe37d9e2bc9a68c51d7c6cc5460935f537)
1 /*
2  * Copyright (c) 2001-2005, Haiku, Inc.
3  * Distributed under the terms of the MIT license.
4  *
5  * Author: DarkWyrm <bpmagic@columbus.rr.com>
6  */
7 #ifndef	_HAIKU_APP_SERVER_H_
8 #define	_HAIKU_APP_SERVER_H_
9 
10 #include <OS.h>
11 #include <Locker.h>
12 #include <List.h>
13 #include <Application.h>
14 #include <Window.h>
15 #include <String.h>
16 
17 #include "ServerConfig.h"
18 
19 class Layer;
20 class BMessage;
21 class ServerApp;
22 class DisplayDriver;
23 class CursorManager;
24 class BitmapManager;
25 
26 namespace BPrivate {
27 	class PortLink;
28 };
29 
30 /*!
31 	\class AppServer AppServer.h
32 	\brief main manager object for the app_server
33 
34 	File for the main app_server thread. This particular thread monitors for
35 	application start and quit messages. It also starts the housekeeping threads
36 	and initializes most of the server's globals.
37 */
38 
39 class AppServer {
40 public:
41 	AppServer(void);
42 	~AppServer(void);
43 
44 	static	int32 PollerThread(void *data);
45 	static	int32 PicassoThread(void *data);
46 	thread_id Run(void);
47 	void MainLoop(void);
48 
49 	bool LoadDecorator(const char *path);
50 	void InitDecorators(void);
51 
52 	void DispatchMessage(int32 code, BPrivate::PortLink &link);
53 	void Broadcast(int32 code);
54 
55 	ServerApp* FindApp(const char *sig);
56 
57 private:
58 	void LaunchCursorThread();
59 	void LaunchInputServer();
60 
61 	port_id	fMessagePort;
62 	port_id	fServerInputPort;
63 
64 	volatile bool fQuittingServer;
65 
66 	BList *fAppList;
67 	thread_id fPicassoThreadID;
68 
69 	thread_id fISThreadID;
70 	thread_id fCursorThreadID;
71 	sem_id fCursorSem;
72 	area_id	fCursorArea;
73 	uint32 *fCursorAddr;
74 
75 	port_id fISASPort;
76 	port_id fISPort;
77 
78 	sem_id 	fActiveAppLock,
79 			fAppListLock,
80 			fDecoratorLock;
81 
82 	DisplayDriver *fDriver;
83 };
84 
85 extern BitmapManager *bitmapmanager;
86 extern AppServer *app_server;
87 extern port_id gAppServerPort;
88 
89 #endif	/* _HAIKU_APP_SERVER_H_ */
90