00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "RequestQueue.h"
00026
00027 namespace cmlabs {
00028
00029
00030
00031
00032
00033 RequestQueue::RequestQueue() {
00034 inQueue = new Queue();
00035 outQueue = new Queue();
00036 }
00037
00038 RequestQueue::~RequestQueue()
00039 {
00040 delete(inQueue);
00041 delete(outQueue);
00042 }
00043
00044
00045 JString RequestQueue::enterRequest(JString req) {
00046 JString id = inQueue->add(req);
00047 wait(0);
00048 return id;
00049 }
00050
00051 JString RequestQueue::waitForReply(JString id, long ms) {
00052 return outQueue->waitForNewEntry(id, ms);
00053 }
00054
00055 bool RequestQueue::isEmpty() {
00056 return inQueue->isEmpty();
00057 }
00058
00059 int RequestQueue::getCount() {
00060 return inQueue->getCount();
00061 }
00062
00063
00064 unsigned long RequestQueue::getPayloadSize() const {
00065 return inQueue->getPayloadSize() + outQueue->getPayloadSize();
00066 }
00067
00068
00069 JString RequestQueue::waitForNewRequestID(int ms) {
00070 return inQueue->waitForNewEntryID(ms);
00071 }
00072
00073 JString RequestQueue::getRequest(JString id) {
00074 return inQueue->retrieveEntry(id);
00075 }
00076
00077 bool RequestQueue::reply(JString id, JString rep) {
00078 return (outQueue->add(id, rep).length() > 0);
00079 }
00080
00081
00082 bool RequestQueue::unitTest() {
00083
00084 RequestQueue* rq = new RequestQueue();
00085
00086 JTime t;
00087 if (rq->waitForReply("bla", 500).length() > 0)
00088 return false;
00089 if (t.getAge() < 490) {
00090 this->addUnitTestLog(JString::format("RequestQueue triggered too early, after only %.3f ms instead of %d ms", t.getMicroAge()/1000.0, 500));
00091 return false;
00092 }
00093
00094 t = JTime();
00095 if (rq->waitForNewRequestID(500).length() > 0)
00096 return false;
00097 if (t.getAge() < 490) {
00098 this->addUnitTestLog(JString::format("RequestQueue triggered the id too early, after only %.3f ms instead of %d ms", t.getMicroAge()/1000.0, 500));
00099 return false;
00100 }
00101
00102
00103 JString id = rq->enterRequest("Test");
00104
00105
00106 if (rq->waitForReply(id, 500).length() > 0)
00107 return false;
00108
00109 JString id2 = rq->waitForNewRequestID(500);
00110
00111 if (!id.equals(id2))
00112 return false;
00113
00114 JString request = rq->getRequest(id2);
00115
00116 if (!request.equals("Test"))
00117 return false;
00118
00119
00120 if (!rq->reply(id, "TestReply"))
00121 return false;
00122
00123
00124 if (!rq->waitForReply(id, 500).equals("TestReply"))
00125 return false;
00126
00127 delete(rq);
00128
00129 return true;
00130 }
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145 }