diff --git a/MQTTSNGateway/src/MQTTSNGateway.cpp b/MQTTSNGateway/src/MQTTSNGateway.cpp index 9db087c..5ed7103 100644 --- a/MQTTSNGateway/src/MQTTSNGateway.cpp +++ b/MQTTSNGateway/src/MQTTSNGateway.cpp @@ -315,7 +315,10 @@ void EventQue::setMaxSize(uint16_t maxSize) Event* EventQue::wait(void) { Event* ev; - _sem.wait(); + if ( _que.size() == 0 ) + { + _sem.wait(); + } _mutex.lock(); ev = _que.front(); _que.pop(); @@ -326,7 +329,10 @@ Event* EventQue::wait(void) Event* EventQue::timedwait(uint16_t millsec) { Event* ev; - _sem.timedwait(millsec); + if ( _que.size() == 0 ) + { + _sem.timedwait(millsec); + } _mutex.lock(); if (_que.size() == 0) @@ -338,11 +344,6 @@ Event* EventQue::timedwait(uint16_t millsec) { ev = _que.front(); _que.pop(); - if ( !ev ) - { - ev = new Event(); - ev->setTimeout(); - } } _mutex.unlock(); return ev; diff --git a/MQTTSNGateway/src/tests/TestProcessFramework.cpp b/MQTTSNGateway/src/tests/TestProcessFramework.cpp index 627b2e0..0aef1e1 100644 --- a/MQTTSNGateway/src/tests/TestProcessFramework.cpp +++ b/MQTTSNGateway/src/tests/TestProcessFramework.cpp @@ -18,6 +18,8 @@ #include #include "TestProcessFramework.h" #include "MQTTSNGWProcess.h" +#include "MQTTSNGWClient.h" +#include "MQTTSNGWPacket.h" #include "Timer.h" using namespace std; @@ -65,7 +67,7 @@ void TestProcessFramework::run(void) { putLog("Test RingBuffer %d ", 1234567890); } - putLog("\n\nRingBuffer Test complieted. Enter CTRL+C\n"); + putLog("\n\nRingBuffer Test complieted.\n"); for ( i = 0; i < 10; i++ ) { @@ -114,6 +116,19 @@ void TestProcessFramework::run(void) while (!tm.isTimeup(1000)); printf("%s Timer 1sec\n", currentDateTime()); + printf("EventQue test start.\n"); + Client* client = new Client(); + _evQue.setMaxSize(EVENT_CNT); + for ( int i = 0; i < EVENT_CNT + 4; i++ ) + { + Event* ev = new Event(); + MQTTSNPacket* packet = new MQTTSNPacket(); + packet->setDISCONNECT(i); + ev->setClientSendEvent(client, packet); + _evQue.post(ev); + } + + MultiTaskProcess::run(); printf("ProcessFramework test complited.\n"); diff --git a/MQTTSNGateway/src/tests/TestProcessFramework.h b/MQTTSNGateway/src/tests/TestProcessFramework.h index 88617f1..8967927 100644 --- a/MQTTSNGateway/src/tests/TestProcessFramework.h +++ b/MQTTSNGateway/src/tests/TestProcessFramework.h @@ -17,8 +17,8 @@ #define TESTPROCESSFRAMEWORK_H_ #include "MQTTSNGWProcess.h" - - +#include "MQTTSNGateway.h" +#define EVENT_CNT 10 namespace MQTTSNGW { class TestProcessFramework: public MultiTaskProcess{ @@ -27,9 +27,10 @@ public: ~TestProcessFramework(); virtual void initialize(int argc, char** argv); void run(void); + EventQue* getEventQue(void) { return &_evQue; } private: - + EventQue _evQue; }; class TestQue diff --git a/MQTTSNGateway/src/tests/TestTask.cpp b/MQTTSNGateway/src/tests/TestTask.cpp index ae5cff8..ab451e9 100644 --- a/MQTTSNGateway/src/tests/TestTask.cpp +++ b/MQTTSNGateway/src/tests/TestTask.cpp @@ -14,6 +14,7 @@ * Tomoaki Yamaguchi - initial API and implementation **************************************************************************************/ #include +#include #include "TestTask.h" #include "Threading.h" @@ -23,6 +24,7 @@ using namespace MQTTSNGW; TestTask::TestTask(TestProcessFramework* proc) { proc->attach((Thread*)this); + _proc = proc; } TestTask::~TestTask() @@ -37,6 +39,26 @@ void TestTask::initialize(int argc, char** argv) void TestTask::run(void) { + EventQue* evQue = _proc->getEventQue(); + uint16_t duration = 0; + int cnt = 0; + + while (true) + { + Event* ev = evQue->timedwait(5000); + if ( ev->getEventType() == EtTimeout ) + { + assert(EVENT_CNT == cnt); + delete ev; + break; + } + cnt++; + MQTTSNPacket* packet = ev->getMQTTSNPacket(); + packet->getDISCONNECT(&duration); + printf("Event %d\n", duration); + delete ev; + } + while(true) { if ( CHK_SIGINT) diff --git a/MQTTSNGateway/src/tests/TestTask.h b/MQTTSNGateway/src/tests/TestTask.h index c79db00..a11076a 100644 --- a/MQTTSNGateway/src/tests/TestTask.h +++ b/MQTTSNGateway/src/tests/TestTask.h @@ -33,7 +33,7 @@ public: void run(void); private: - + TestProcessFramework* _proc; }; }