+
+
+// WorkItem class for event thread
+class PersonInEventWorkItem : public WorkItem
+{
+public:
+ PersonInEventWorkItem(std::set<EngineObserver*> obs, PersonsInfoPtr info) : obs(obs), info(info){
+ }
+ ~PersonInEventWorkItem(){}
+ void run (){
+ for (auto o : obs){
+ o->onPersonsIn(*(info.get()));
+ }
+ }
+private:
+ std::set<EngineObserver*> obs;
+ PersonsInfoPtr info;
+};
+
+class PersonOutEventWorkItem : public WorkItem
+{
+public:
+ PersonOutEventWorkItem(std::set<EngineObserver*> obs, PersonsInfoPtr info) : obs(obs), info(info){
+ }
+ ~PersonOutEventWorkItem(){}
+ void run (){
+ for (auto o : obs){
+ o->onPersonsIn(*(info.get()));
+ }
+ }
+private:
+ std::set<EngineObserver*> obs;
+ PersonsInfoPtr info;
+};
+
+void Engine::onPersonsOut(const std::vector<Person>& p)
+{
+ LOG_DEBUG(TAG, "onPersonOut");
+ PersonsInfoPtr pp = std::make_shared<std::vector<Person>>(p);
+ eventThread.enqueue(new PersonOutEventWorkItem(this->observer_list, pp));
+}
+
+void Engine::onPersonsIn(const std::vector<Person>& p)
+{
+ LOG_DEBUG(TAG, "onPersonIn");
+ PersonsInfoPtr pp = std::make_shared<std::vector<Person>>(p);
+ eventThread.enqueue(new PersonInEventWorkItem(this->observer_list, pp));
+}