00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "mmscore/mmseventdispatcher.h"
00034 #include "mmscore/mmseventthread.h"
00035
00036
00037 MMSEventDispatcher::MMSEventDispatcher(MMSPluginManager *manager,MMSEventSignupManager *signupmanager) {
00038 this->manager = manager;
00039 this->signupmanager = signupmanager;
00040 }
00041
00042 MMSEventDispatcher::~MMSEventDispatcher() {
00043 }
00044
00045 void MMSEventDispatcher::raise(_IMMSEvent *event, int id) {
00046 MMSEventThread *thread;
00047 vector <MMSOSDPluginHandler *> osdHandlers;
00048 vector <MMSCentralPluginHandler *> centralHandlers;
00049 vector <MMSBackendPluginHandler *> backendHandlers;
00050 vector <MMSPluginData *> plugins;
00051 vector <sigc::signal<void, _IMMSEvent*> *> mysignals;
00052 IMMSEvent e(event);
00053
00054 if (id > 0) {
00055 DEBUGMSG("MMSEventdispatcher", "have a direct receiver");
00056 try {
00057 thread = new MMSEventThread(this->getManager()->getOSDPluginHandler(id), e);
00058 } catch(MMSError &error) {
00059 thread = new MMSEventThread(this->getManager()->getCentralPluginHandler(id), e);
00060 }
00061 thread->start();
00062 } else {
00063 DEBUGMSG("MMSEventdispatcher", "get receiver plugins");
00064
00065 try {
00066 plugins = this->getSignupManager()->getReceiverPlugins(event);
00067
00068 DEBUGMSG("MMSEventdispatcher", "filter the osd handler");
00069
00070 osdHandlers = getManager()->getOSDPluginHandlers(plugins);
00071 for(unsigned int i=0; i<osdHandlers.size();i++) {
00072 DEBUGMSG("MMSEventdispatcher", "%s --> create new event thread for %s.", (osdHandlers.at(i))->getPluginData().getName().c_str(), event->getHeading().c_str());
00073
00074 thread = new MMSEventThread(osdHandlers.at(i), e);
00075 thread->start();
00076 }
00077
00078 DEBUGMSG("MMSEventdispatcher", "filter the central handler");
00079
00080 centralHandlers = getManager()->getCentralPluginHandlers(plugins);
00081 for(unsigned int i=0; i<centralHandlers.size();i++) {
00082 DEBUGMSG("MMSEventdispatcher", "%s --> create new event thread for %s", (centralHandlers.at(i))->getPluginData().getName().c_str(), event->getHeading().c_str());
00083
00084 thread = new MMSEventThread(centralHandlers.at(i), e);
00085 thread->start();
00086 }
00087
00088 DEBUGMSG("MMSEventdispatcher", "filter the backend handler");
00089
00090 backendHandlers = getManager()->getBackendPluginHandlers(plugins);
00091 for(unsigned int i=0; i<backendHandlers.size();i++) {
00092
00093 DEBUGMSG("MMSEventdispatcher", "%s --> create new event thread for %s.", (backendHandlers.at(i))->getPluginData().getName().c_str(), event->getHeading().c_str());
00094 thread = new MMSEventThread(backendHandlers.at(i), e);
00095 thread->start();
00096 }
00097
00098 } catch (MMSEventSignupManagerError &err) {
00099 DEBUGMSG("MMSEventdispatcher", "Error: %s", err.getMessage().c_str());
00100 DEBUGMSG("MMSEventdispatcher", "try signal receivers");
00101 }
00102
00103
00104 try {
00105 mysignals = this->getSignupManager()->getReceiverSignals(event);
00106 for(vector <sigc::signal<void, _IMMSEvent*> *>::iterator it = mysignals.begin(); it != mysignals.end();it++) {
00107 (*it)->emit(event);
00108 }
00109 } catch (MMSEventSignupManagerError &err) {
00110 DEBUGMSG("MMSEventdispatcher", "Error: %s", err.getMessage().c_str());
00111 return;
00112 }
00113
00114
00115 for(vector<MMSPluginData *>::iterator it = plugins.begin(); it != plugins.end(); ++it)
00116 delete *it;
00117
00118 plugins.clear();
00119 }
00120 }
00121
00122 MMSPluginManager *MMSEventDispatcher::getManager() {
00123 return this->manager;
00124 }
00125 MMSEventSignupManager *MMSEventDispatcher::getSignupManager() {
00126 return this->signupmanager;
00127 }