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