From 16b935b77fe59e178e00e7118427d29b0b631e0c Mon Sep 17 00:00:00 2001 From: Ryan Benasutti Date: Thu, 2 May 2019 13:24:28 -0400 Subject: [PATCH] 2: Refactor fmap and add detach --- .gitignore | 1 + src/SimplePacketComs.cpp | 26 ++++++++++++++++++-------- src/SimplePacketComs.h | 13 ++++++++++--- 3 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..722d5e7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vscode diff --git a/src/SimplePacketComs.cpp b/src/SimplePacketComs.cpp index abe2dc2..000ebb4 100644 --- a/src/SimplePacketComs.cpp +++ b/src/SimplePacketComs.cpp @@ -17,7 +17,13 @@ uint32_t SimplePacketComsAbstract::getNumberOfFloatsInPacket(){ } void SimplePacketComsAbstract::attach(PacketEventAbstract * eventImplementation){ - fmap.push_back(eventImplementation); + fmap[eventImplementation->getId()] = eventImplementation; +} + +PacketEventAbstract * SimplePacketComsAbstract::detach(uint32_t id) { + PacketEventAbstract *event = fmap[id]; + fmap.erase(id); + return event; } /** @@ -27,13 +33,17 @@ void SimplePacketComsAbstract::server(){ if(isPacketAvailible()){ getPacket(buffer, numberOfBytes); uint32_t currentId = getIdPointer()[0]; - for (std::vector::iterator it = fmap.begin() ; it != fmap.end(); ++it){ - if((*it)->getId() == currentId){ - (*it)-> noResponse=false;// reset the response flag - (*it)->event(getDataPointer()); - if((*it)->noResponse==false)// responde unless the no response flag is set - sendPacket(buffer, numberOfBytes); - return;// packet is responded to, fast return + for (std::map::iterator it = fmap.begin() ; it != fmap.end(); ++it){ + if (it->second->getId() == currentId) { + it->second->noResponse = false; // reset the response flag + it->second->event(getDataPointer()); + + if (it->second->noResponse == false) { + // respond unless the no response flag is set + sendPacket(buffer, numberOfBytes); + } + + return; // packet is responded to, fast return } } diff --git a/src/SimplePacketComs.h b/src/SimplePacketComs.h index 96cb44f..6fab56f 100644 --- a/src/SimplePacketComs.h +++ b/src/SimplePacketComs.h @@ -2,7 +2,7 @@ #define SimplePacketComs #include #include -#include +#include #include #include "PacketEvent.h" #include "client/AbstractSimpleComsDevice.h" @@ -15,7 +15,7 @@ class SimplePacketComsAbstract { private: uint32_t numberOfBytes; uint8_t * buffer; - std::vector fmap; + std::map fmap; public: SimplePacketComsAbstract(); /** @@ -49,6 +49,13 @@ class SimplePacketComsAbstract { * Attach a function to a packet event */ void attach(PacketEventAbstract * eventImplementation); + /** + * Detach a function from a packet event. + * + * @param id The packet id. + * @return The function that was attached. + */ + PacketEventAbstract * detach(uint32_t id); /** * This runs the packet server and calls all events if a backet comes in */ @@ -64,7 +71,7 @@ class SimplePacketComsAbstract { float * getDataPointer(){ return (float *)(buffer+4); } - std::vector * getfMap(){ return &fmap;} + std::map * getfMap(){ return &fmap;} };