xref: /haiku/src/servers/registrar/Registrar.cpp (revision 51d6b22ec17f08ff1740f9c5ebb74ed7bd615008)
14b8a7115SIngo Weinhold // Registrar.cpp
24b8a7115SIngo Weinhold 
34b8a7115SIngo Weinhold #ifndef DEBUG
44b8a7115SIngo Weinhold #	define DEBUG 1
54b8a7115SIngo Weinhold #endif
64b8a7115SIngo Weinhold #include "Debug.h"
74b8a7115SIngo Weinhold 
84b8a7115SIngo Weinhold #include <Application.h>
94b8a7115SIngo Weinhold #include <Message.h>
104b8a7115SIngo Weinhold #include <OS.h>
114b8a7115SIngo Weinhold #include <RegistrarDefs.h>
124b8a7115SIngo Weinhold 
134b8a7115SIngo Weinhold #include "ClipboardHandler.h"
144b8a7115SIngo Weinhold #include "MIMEManager.h"
154b8a7115SIngo Weinhold #include "Registrar.h"
16*51d6b22eSIngo Weinhold #include "TRoster.h"
174b8a7115SIngo Weinhold 
184b8a7115SIngo Weinhold // constructor
194b8a7115SIngo Weinhold Registrar::Registrar()
204b8a7115SIngo Weinhold 		 : BApplication(kRegistrarSignature),
21*51d6b22eSIngo Weinhold 		   fRoster(NULL),
224b8a7115SIngo Weinhold 		   fClipboardHandler(NULL),
234b8a7115SIngo Weinhold 		   fMIMEManager(NULL)
244b8a7115SIngo Weinhold {
254b8a7115SIngo Weinhold FUNCTION_START();
264b8a7115SIngo Weinhold 	// move the following code to ReadyToRun() once it works.
27*51d6b22eSIngo Weinhold 	fRoster = new TRoster;
284b8a7115SIngo Weinhold 	fClipboardHandler = new ClipboardHandler;
294b8a7115SIngo Weinhold 	AddHandler(fClipboardHandler);
304b8a7115SIngo Weinhold 	fMIMEManager = new MIMEManager;
314b8a7115SIngo Weinhold 	fMIMEManager->Run();
324b8a7115SIngo Weinhold }
334b8a7115SIngo Weinhold 
344b8a7115SIngo Weinhold // destructor
354b8a7115SIngo Weinhold Registrar::~Registrar()
364b8a7115SIngo Weinhold {
374b8a7115SIngo Weinhold FUNCTION_START();
384b8a7115SIngo Weinhold 	fMIMEManager->Lock();
394b8a7115SIngo Weinhold 	fMIMEManager->Quit();
404b8a7115SIngo Weinhold 	RemoveHandler(fClipboardHandler);
414b8a7115SIngo Weinhold 	delete fClipboardHandler;
42*51d6b22eSIngo Weinhold 	delete fRoster;
434b8a7115SIngo Weinhold }
444b8a7115SIngo Weinhold 
454b8a7115SIngo Weinhold // MessageReceived
464b8a7115SIngo Weinhold void
474b8a7115SIngo Weinhold Registrar::MessageReceived(BMessage *message)
484b8a7115SIngo Weinhold {
494b8a7115SIngo Weinhold FUNCTION_START();
504b8a7115SIngo Weinhold 	switch (message->what) {
514b8a7115SIngo Weinhold 		case B_REG_GET_MIME_MESSENGER:
524b8a7115SIngo Weinhold 		{
534b8a7115SIngo Weinhold 			PRINT(("B_REG_GET_MIME_MESSENGER\n"));
544b8a7115SIngo Weinhold 			BMessenger messenger(NULL, fMIMEManager);
554b8a7115SIngo Weinhold 			BMessage reply(B_REG_SUCCESS);
564b8a7115SIngo Weinhold 			reply.AddMessenger("messenger", messenger);
574b8a7115SIngo Weinhold 			message->SendReply(&reply);
584b8a7115SIngo Weinhold 			break;
594b8a7115SIngo Weinhold 		}
604b8a7115SIngo Weinhold 		case B_REG_GET_CLIPBOARD_MESSENGER:
614b8a7115SIngo Weinhold 		{
624b8a7115SIngo Weinhold 			PRINT(("B_REG_GET_CLIPBOARD_MESSENGER\n"));
634b8a7115SIngo Weinhold 			BMessenger messenger(fClipboardHandler);
644b8a7115SIngo Weinhold 			BMessage reply(B_REG_SUCCESS);
654b8a7115SIngo Weinhold 			reply.AddMessenger("messenger", messenger);
664b8a7115SIngo Weinhold 			message->SendReply(&reply);
674b8a7115SIngo Weinhold 			break;
684b8a7115SIngo Weinhold 		}
69*51d6b22eSIngo Weinhold 		case B_REG_ADD_APP:
70*51d6b22eSIngo Weinhold 			fRoster->HandleAddApplication(message);
71*51d6b22eSIngo Weinhold 			break;
72*51d6b22eSIngo Weinhold 		case B_REG_COMPLETE_REGISTRATION:
73*51d6b22eSIngo Weinhold 			fRoster->HandleCompleteRegistration(message);
74*51d6b22eSIngo Weinhold 			break;
75*51d6b22eSIngo Weinhold 		case B_REG_IS_PRE_REGISTERED:
76*51d6b22eSIngo Weinhold 			fRoster->HandleIsAppPreRegistered(message);
77*51d6b22eSIngo Weinhold 			break;
78*51d6b22eSIngo Weinhold 		case B_REG_REMOVE_PRE_REGISTERED_APP:
79*51d6b22eSIngo Weinhold 			fRoster->HandleRemovePreRegApp(message);
80*51d6b22eSIngo Weinhold 			break;
81*51d6b22eSIngo Weinhold 		case B_REG_REMOVE_APP:
82*51d6b22eSIngo Weinhold 			fRoster->HandleRemoveApp(message);
83*51d6b22eSIngo Weinhold 			break;
844b8a7115SIngo Weinhold 		default:
854b8a7115SIngo Weinhold 			BApplication::MessageReceived(message);
864b8a7115SIngo Weinhold 			break;
874b8a7115SIngo Weinhold 	}
884b8a7115SIngo Weinhold FUNCTION_END();
894b8a7115SIngo Weinhold }
904b8a7115SIngo Weinhold 
914b8a7115SIngo Weinhold // ReadyToRun
924b8a7115SIngo Weinhold void
934b8a7115SIngo Weinhold Registrar::ReadyToRun()
944b8a7115SIngo Weinhold {
954b8a7115SIngo Weinhold FUNCTION_START();
964b8a7115SIngo Weinhold }
974b8a7115SIngo Weinhold 
984b8a7115SIngo Weinhold // QuitRequested
994b8a7115SIngo Weinhold bool
1004b8a7115SIngo Weinhold Registrar::QuitRequested()
1014b8a7115SIngo Weinhold {
1024b8a7115SIngo Weinhold FUNCTION_START();
1034b8a7115SIngo Weinhold 	// The final registrar must not quit. At least not that easily. ;-)
1044b8a7115SIngo Weinhold 	return BApplication::QuitRequested();
1054b8a7115SIngo Weinhold }
1064b8a7115SIngo Weinhold 
1074b8a7115SIngo Weinhold 
1084b8a7115SIngo Weinhold // main
1094b8a7115SIngo Weinhold int
1104b8a7115SIngo Weinhold main()
1114b8a7115SIngo Weinhold {
1124b8a7115SIngo Weinhold FUNCTION_START();
1134b8a7115SIngo Weinhold 	// rename the main thread
1144b8a7115SIngo Weinhold 	rename_thread(find_thread(NULL), kRosterThreadName);
1154b8a7115SIngo Weinhold 	// create and run the registrar application
1164b8a7115SIngo Weinhold 	Registrar *app = new Registrar();
1174b8a7115SIngo Weinhold PRINT(("app->Run()...\n"));
1184b8a7115SIngo Weinhold 	app->Run();
1194b8a7115SIngo Weinhold PRINT(("delete app...\n"));
1204b8a7115SIngo Weinhold 	delete app;
1214b8a7115SIngo Weinhold FUNCTION_END();
1224b8a7115SIngo Weinhold 	return 0;
1234b8a7115SIngo Weinhold }
1244b8a7115SIngo Weinhold 
125