xref: /haiku/src/servers/registrar/Registrar.cpp (revision c39e453222457c0c214f7663a8f90044424222d7)
14b8a7115SIngo Weinhold // Registrar.cpp
24b8a7115SIngo Weinhold 
34b8a7115SIngo Weinhold #include "Debug.h"
44b8a7115SIngo Weinhold 
54b8a7115SIngo Weinhold #include <Application.h>
64b8a7115SIngo Weinhold #include <Message.h>
74b8a7115SIngo Weinhold #include <OS.h>
84b8a7115SIngo Weinhold #include <RegistrarDefs.h>
94b8a7115SIngo Weinhold 
104b8a7115SIngo Weinhold #include "ClipboardHandler.h"
114b8a7115SIngo Weinhold #include "MIMEManager.h"
124b8a7115SIngo Weinhold #include "Registrar.h"
1351d6b22eSIngo Weinhold #include "TRoster.h"
144b8a7115SIngo Weinhold 
154b8a7115SIngo Weinhold // constructor
164b8a7115SIngo Weinhold Registrar::Registrar()
174b8a7115SIngo Weinhold 		 : BApplication(kRegistrarSignature),
1851d6b22eSIngo Weinhold 		   fRoster(NULL),
194b8a7115SIngo Weinhold 		   fClipboardHandler(NULL),
204b8a7115SIngo Weinhold 		   fMIMEManager(NULL)
214b8a7115SIngo Weinhold {
224b8a7115SIngo Weinhold 	FUNCTION_START();
234b8a7115SIngo Weinhold 	// move the following code to ReadyToRun() once it works.
2451d6b22eSIngo Weinhold 	fRoster = new TRoster;
254b8a7115SIngo Weinhold 	fClipboardHandler = new ClipboardHandler;
264b8a7115SIngo Weinhold 	AddHandler(fClipboardHandler);
274b8a7115SIngo Weinhold 	fMIMEManager = new MIMEManager;
284b8a7115SIngo Weinhold 	fMIMEManager->Run();
29*c39e4532SIngo Weinhold 	FUNCTION_END();
304b8a7115SIngo Weinhold }
314b8a7115SIngo Weinhold 
324b8a7115SIngo Weinhold // destructor
334b8a7115SIngo Weinhold Registrar::~Registrar()
344b8a7115SIngo Weinhold {
354b8a7115SIngo Weinhold 	FUNCTION_START();
364b8a7115SIngo Weinhold 	fMIMEManager->Lock();
374b8a7115SIngo Weinhold 	fMIMEManager->Quit();
384b8a7115SIngo Weinhold 	RemoveHandler(fClipboardHandler);
394b8a7115SIngo Weinhold 	delete fClipboardHandler;
4051d6b22eSIngo Weinhold 	delete fRoster;
41*c39e4532SIngo Weinhold 	FUNCTION_END();
424b8a7115SIngo Weinhold }
434b8a7115SIngo Weinhold 
444b8a7115SIngo Weinhold // MessageReceived
454b8a7115SIngo Weinhold void
464b8a7115SIngo Weinhold Registrar::MessageReceived(BMessage *message)
474b8a7115SIngo Weinhold {
484b8a7115SIngo Weinhold 	FUNCTION_START();
494b8a7115SIngo Weinhold 	switch (message->what) {
504b8a7115SIngo Weinhold 		case B_REG_GET_MIME_MESSENGER:
514b8a7115SIngo Weinhold 		{
524b8a7115SIngo Weinhold 			PRINT(("B_REG_GET_MIME_MESSENGER\n"));
534b8a7115SIngo Weinhold 			BMessenger messenger(NULL, fMIMEManager);
544b8a7115SIngo Weinhold 			BMessage reply(B_REG_SUCCESS);
554b8a7115SIngo Weinhold 			reply.AddMessenger("messenger", messenger);
564b8a7115SIngo Weinhold 			message->SendReply(&reply);
574b8a7115SIngo Weinhold 			break;
584b8a7115SIngo Weinhold 		}
594b8a7115SIngo Weinhold 		case B_REG_GET_CLIPBOARD_MESSENGER:
604b8a7115SIngo Weinhold 		{
614b8a7115SIngo Weinhold 			PRINT(("B_REG_GET_CLIPBOARD_MESSENGER\n"));
624b8a7115SIngo Weinhold 			BMessenger messenger(fClipboardHandler);
634b8a7115SIngo Weinhold 			BMessage reply(B_REG_SUCCESS);
644b8a7115SIngo Weinhold 			reply.AddMessenger("messenger", messenger);
654b8a7115SIngo Weinhold 			message->SendReply(&reply);
664b8a7115SIngo Weinhold 			break;
674b8a7115SIngo Weinhold 		}
6851d6b22eSIngo Weinhold 		case B_REG_ADD_APP:
6951d6b22eSIngo Weinhold 			fRoster->HandleAddApplication(message);
7051d6b22eSIngo Weinhold 			break;
7151d6b22eSIngo Weinhold 		case B_REG_COMPLETE_REGISTRATION:
7251d6b22eSIngo Weinhold 			fRoster->HandleCompleteRegistration(message);
7351d6b22eSIngo Weinhold 			break;
7451d6b22eSIngo Weinhold 		case B_REG_IS_PRE_REGISTERED:
7551d6b22eSIngo Weinhold 			fRoster->HandleIsAppPreRegistered(message);
7651d6b22eSIngo Weinhold 			break;
7751d6b22eSIngo Weinhold 		case B_REG_REMOVE_PRE_REGISTERED_APP:
7851d6b22eSIngo Weinhold 			fRoster->HandleRemovePreRegApp(message);
7951d6b22eSIngo Weinhold 			break;
8051d6b22eSIngo Weinhold 		case B_REG_REMOVE_APP:
8151d6b22eSIngo Weinhold 			fRoster->HandleRemoveApp(message);
8251d6b22eSIngo Weinhold 			break;
83*c39e4532SIngo Weinhold 		case B_REG_SET_THREAD_AND_TEAM:
84*c39e4532SIngo Weinhold 			fRoster->HandleSetThreadAndTeam(message);
85*c39e4532SIngo Weinhold 			break;
86*c39e4532SIngo Weinhold 		case B_REG_GET_RUNNING_APP_INFO:
87*c39e4532SIngo Weinhold 			fRoster->HandleGetRunningAppInfo(message);
88*c39e4532SIngo Weinhold 			break;
894b8a7115SIngo Weinhold 		default:
904b8a7115SIngo Weinhold 			BApplication::MessageReceived(message);
914b8a7115SIngo Weinhold 			break;
924b8a7115SIngo Weinhold 	}
934b8a7115SIngo Weinhold 	FUNCTION_END();
944b8a7115SIngo Weinhold }
954b8a7115SIngo Weinhold 
964b8a7115SIngo Weinhold // ReadyToRun
974b8a7115SIngo Weinhold void
984b8a7115SIngo Weinhold Registrar::ReadyToRun()
994b8a7115SIngo Weinhold {
1004b8a7115SIngo Weinhold 	FUNCTION_START();
1014b8a7115SIngo Weinhold }
1024b8a7115SIngo Weinhold 
1034b8a7115SIngo Weinhold // QuitRequested
1044b8a7115SIngo Weinhold bool
1054b8a7115SIngo Weinhold Registrar::QuitRequested()
1064b8a7115SIngo Weinhold {
1074b8a7115SIngo Weinhold 	FUNCTION_START();
1084b8a7115SIngo Weinhold 	// The final registrar must not quit. At least not that easily. ;-)
1094b8a7115SIngo Weinhold 	return BApplication::QuitRequested();
110*c39e4532SIngo Weinhold 	FUNCTION_END();
1114b8a7115SIngo Weinhold }
1124b8a7115SIngo Weinhold 
1134b8a7115SIngo Weinhold 
1144b8a7115SIngo Weinhold // main
1154b8a7115SIngo Weinhold int
1164b8a7115SIngo Weinhold main()
1174b8a7115SIngo Weinhold {
1184b8a7115SIngo Weinhold 	FUNCTION_START();
1194b8a7115SIngo Weinhold 	// rename the main thread
1204b8a7115SIngo Weinhold 	rename_thread(find_thread(NULL), kRosterThreadName);
1214b8a7115SIngo Weinhold 	// create and run the registrar application
1224b8a7115SIngo Weinhold 	Registrar *app = new Registrar();
1234b8a7115SIngo Weinhold PRINT(("app->Run()...\n"));
1244b8a7115SIngo Weinhold 	app->Run();
1254b8a7115SIngo Weinhold PRINT(("delete app...\n"));
1264b8a7115SIngo Weinhold 	delete app;
1274b8a7115SIngo Weinhold 	FUNCTION_END();
1284b8a7115SIngo Weinhold 	return 0;
1294b8a7115SIngo Weinhold }
1304b8a7115SIngo Weinhold 
131