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