Salome HOME
Merge branch 'master' into cgt/devCEA
[modules/shaper.git] / src / Events / Events_Listener.cpp
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:        Events_Listener.cxx
4 // Created:     Thu Mar 13 2014
5 // Author:      Mikhail PONIKAROV
6
7 #include <Events_Listener.h>
8 #include <Events_MessageGroup.h>
9 #include <Events_Loop.h>
10
11 void Events_Listener::groupWhileFlush(const std::shared_ptr<Events_Message>& theMessage) {
12   std::shared_ptr<Events_MessageGroup> aGroup =
13     std::dynamic_pointer_cast<Events_MessageGroup>(theMessage);
14   if (aGroup) {
15     std::map<char*, std::shared_ptr<Events_Message> >::iterator aMyGroup = myGroups.find(
16       aGroup->eventID().eventText());
17     if (aMyGroup == myGroups.end()) {  // create a new group of messages for accumulation
18       myGroups[aGroup->eventID().eventText()] = aGroup->newEmpty();
19       aMyGroup = myGroups.find(aGroup->eventID().eventText());
20     }
21     std::shared_ptr<Events_MessageGroup> aStored =
22       std::dynamic_pointer_cast<Events_MessageGroup>(aMyGroup->second);
23     aStored->Join(aGroup);
24     //std::cout<<"Add to group "<<theMessage->eventID().eventText()<<std::endl;
25     return;
26   }
27 }
28
29 void Events_Listener::flushGrouped(const Events_ID& theID) {
30   std::map<char*, std::shared_ptr<Events_Message> >::iterator aMyGroup =
31     myGroups.find(theID.eventText());
32   if (aMyGroup != myGroups.end()) {
33     std::shared_ptr<Events_Message> aMessage = aMyGroup->second;
34     myGroups.erase(aMyGroup);
35     processEvent(aMessage);
36   }
37 }