From b1019ea26db0a09141250f29abc04ed4c44893fd Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Tue, 10 Mar 2020 06:37:57 +0100 Subject: [PATCH] Allow to have multiple groups with same logoff --- G2Handler.cpp | 19 +++++++++++++++---- GroupHandler.cpp | 12 ++++++++++-- GroupHandler.h | 1 + 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/G2Handler.cpp b/G2Handler.cpp index 702edb2..ec8cec1 100644 --- a/G2Handler.cpp +++ b/G2Handler.cpp @@ -70,11 +70,22 @@ void CG2Handler::process(CHeaderData& header) return; } + std::list groups; + // Check to see if this is for Smart Group - CGroupHandler* handler = CGroupHandler::findGroup(header); - if (handler != NULL) { - handler->process(header); - return; + CGroupHandler* group = CGroupHandler::findGroup(header);//look first for login group + if(group != NULL) { + groups.push_back(group); + } + else { + CGroupHandler::findGroupsByLogoff(header, groups);//get all groups having a matching logoff + } + + for(auto it = groups.begin();it != groups.end(); it++) + { + if ((*it) != NULL) { + (*it)->process(header); + } } } diff --git a/GroupHandler.cpp b/GroupHandler.cpp index fbf2a59..82b041e 100644 --- a/GroupHandler.cpp +++ b/GroupHandler.cpp @@ -222,12 +222,20 @@ CGroupHandler *CGroupHandler::findGroup(const CHeaderData &header) for (auto it=m_Groups.begin(); it!=m_Groups.end(); it++) { if (0 == (*it)->m_groupCallsign.compare(your)) return *it; - if (0 == (*it)->m_offCallsign.compare(your)) - return *it; } return NULL; } +void CGroupHandler::findGroupsByLogoff(const CHeaderData &header, std::list & groups) +{ + std::string your = header.getYourCall(); + + for (auto it=m_Groups.begin(); it!=m_Groups.end(); it++) { + if (0 == (*it)->m_offCallsign.compare(your)) + groups.push_back(*it); + } +} + CGroupHandler *CGroupHandler::findGroup(const CAMBEData &data) { unsigned int id = data.getId(); diff --git a/GroupHandler.h b/GroupHandler.h index 860c890..7d1f6cc 100644 --- a/GroupHandler.h +++ b/GroupHandler.h @@ -120,6 +120,7 @@ public: static CGroupHandler *findGroup(const std::string &callsign); static CGroupHandler *findGroup(const CHeaderData &header); static CGroupHandler *findGroup(const CAMBEData &data); + static void findGroupsByLogoff(const CHeaderData &header, std::list & groups); static void finalise();