Browse Source

[1914] Store the request into a queue

The requests submitted by groupReadMsgAsync are stored into the list.
The tests still fail, since nothing is interested in the content of the
list yet.
Michal 'vorner' Vaner 13 years ago
parent
commit
b174ac98fb
2 changed files with 23 additions and 1 deletions
  1. 22 0
      src/lib/config/ccsession.cc
  2. 1 1
      src/lib/config/ccsession.h

+ 22 - 0
src/lib/config/ccsession.cc

@@ -764,5 +764,27 @@ ModuleCCSession::sendStopping() {
     session_.group_sendmsg(cmd, "ConfigManager");
 }
 
+class ModuleCCSession::AsyncRecvRequest {
+public: // Everything is public here, as the definition is hidden anyway
+    AsyncRecvCallback callback;
+    string recipient;
+    int seq;
+    bool is_reply;
+};
+
+ModuleCCSession::AsyncRecvRequestID
+ModuleCCSession::groupRecvMsgAsync(const AsyncRecvCallback& callback,
+                                   bool is_reply, int seq,
+                                   const string& recipient) {
+    // This just stores the request, the handling is done in checkCommand()
+    boost::shared_ptr<AsyncRecvRequest> request(new AsyncRecvRequest);
+    request->callback = callback;
+    request->recipient = recipient;
+    request->seq = seq;
+    request->is_reply = is_reply;
+    // push_back would be simpler, but it does not return the iterator we need
+    return (async_recv_requests_.insert(async_recv_requests_.end(), request));
+}
+
 }
 }

+ 1 - 1
src/lib/config/ccsession.h

@@ -451,7 +451,7 @@ public:
     ///     callback or can be used to cancel the request by cancelAsyncRecv.
     /// \todo Decide what to do with instance and what was it meant for anyway.
     AsyncRecvRequestID groupRecvMsgAsync(const AsyncRecvCallback& callback,
-                                         bool is_reply = true, int seq = -1,
+                                         bool is_reply, int seq = -1,
                                          const std::string& recipient =
                                          std::string());