+
+static int sendAsyncMessage(const char* name, const char* body, AsyncReplyCallback replyCallback, void* data)
+{
+ using namespace IPCMessageSupport;
+
+ int handle = AsyncConnectionManager::instance().addConnection(AsyncConnectionPtr(new AsyncConnection(replyCallback, data)));
+
+ std::string strBody = body;
+ std::stringstream ss;
+
+ ss << handle;
+ strBody = ss.str() + "_" + strBody;
+
+ sendPostMessage(name, strBody.c_str());
+
+ return handle;
+}
+
+} // namespace
+
+
+namespace IPCMessageSupport {
+
+AsyncConnectionManager::~AsyncConnectionManager()
+{
+ m_connectionMap.clear();
+}
+
+AsyncConnectionManager &AsyncConnectionManager::instance()
+{
+ static AsyncConnectionManager instance;
+
+ return instance;
+}
+
+int AsyncConnectionManager::addConnection(AsyncConnectionPtr connection)
+{
+ static int latestHandle = -1;
+ int newHandle;
+
+ latestHandle++;
+ if (latestHandle < 0) latestHandle = 0;
+
+ newHandle = latestHandle;
+
+ m_connectionMap.insert(AsyncConnectionMap::value_type(newHandle, connection));
+
+ return newHandle;
+}
+
+bool AsyncConnectionManager::removeConnection(int handle)
+{
+ bool ret = (m_connectionMap.erase(handle) == 1);
+
+ return ret;
+}
+
+AsyncConnectionPtr AsyncConnectionManager::getConnection(int handle)
+{
+ AsyncConnectionMap::iterator iter = m_connectionMap.find(handle);
+
+ if (iter != m_connectionMap.end())
+ {
+ return iter->second;
+ }
+
+ return AsyncConnectionPtr();