MCPcopy Create free account
hub / github.com/MITK/MITK / FilterModuleEventReceivers

Method FilterModuleEventReceivers

Modules/CppMicroServices/src/usModuleHooks.cpp:84–161  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

82}
83
84void ModuleHooks::FilterModuleEventReceivers(const ModuleEvent& evt,
85 ServiceListeners::ModuleListenerMap& moduleListeners)
86{
87 std::vector<ServiceRegistrationBase> eventHooks;
88 coreCtx->services.Get(us_service_interface_iid<ModuleEventHook>(), eventHooks);
89
90 {
91 MutexLock lock(coreCtx->listeners.moduleListenerMapMutex);
92 moduleListeners = coreCtx->listeners.moduleListenerMap;
93 }
94
95 if(!eventHooks.empty())
96 {
97 std::vector<ModuleContext*> moduleContexts;
98 for (ServiceListeners::ModuleListenerMap::iterator le = moduleListeners.begin(),
99 leEnd = moduleListeners.end(); le != leEnd; ++le)
100 {
101 moduleContexts.push_back(le->first);
102 }
103 std::sort(moduleContexts.begin(), moduleContexts.end());
104 moduleContexts.erase(std::unique(moduleContexts.begin(), moduleContexts.end()), moduleContexts.end());
105
106 const std::size_t unfilteredSize = moduleContexts.size();
107 ShrinkableVector<ModuleContext*> filtered(moduleContexts);
108
109 std::sort(eventHooks.begin(), eventHooks.end());
110 for (std::vector<ServiceRegistrationBase>::reverse_iterator iter = eventHooks.rbegin(),
111 iterEnd = eventHooks.rend(); iter != iterEnd; ++iter)
112 {
113 ServiceReference<ModuleEventHook> sr;
114 try
115 {
116 sr = iter->GetReference();
117 }
118 catch (const std::logic_error& e)
119 {
120 MITK_WARN << "Failed to get event hook service reference: " << e.what();
121 continue;
122 }
123
124 ModuleEventHook* eh = reinterpret_cast<ModuleEventHook*>(sr.d->GetService(GetModuleContext()->GetModule()));
125 if (eh != nullptr)
126 {
127 try
128 {
129 eh->Event(evt, filtered);
130 }
131 catch (const std::exception& e)
132 {
133 MITK_WARN << "Failed to call Module EventHook #" << sr.GetProperty(ServiceConstants::SERVICE_ID()).ToString()
134 << ": " << e.what();
135 }
136 catch (...)
137 {
138 MITK_WARN << "Failed to call Module EventHook #" << sr.GetProperty(ServiceConstants::SERVICE_ID()).ToString()
139 << ": unknown exception type";
140 }
141 sr.d->UngetService(GetModuleContext()->GetModule(), false);

Callers 1

ModuleChangedMethod · 0.80

Calls 15

GetModuleContextFunction · 0.85
whatMethod · 0.80
GetMethod · 0.45
emptyMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
eraseMethod · 0.45
sizeMethod · 0.45
GetReferenceMethod · 0.45
GetServiceMethod · 0.45
GetModuleMethod · 0.45
EventMethod · 0.45

Tested by

no test coverage detected