1 #include "SSMInterface.h"
2 #include "SSMInterface/SSMCore.h"
3 #include "Common/PlatformLayer.h"
5 class SSMCoreEventReceiver : public IQueryEngineEvent
12 SSMRESULT onQueryEngineEvent(IN int cqid, IN IDataReader *pResult)
14 SSMRESULT res = SSM_E_FAIL;
18 if (m_mapListener.find(cqid) == m_mapListener.end())
20 SSM_CLEANUP_ASSERT(res);
23 m_mapListener[cqid]->onQueryEngineEvent(cqid, pResult);
28 m_mtxListener.unlock();
39 m_mtxListener.unlock();
42 void addListener(IN int cqid, IN IQueryEngineEvent *pEngineEvent)
44 m_mapListener[cqid] = pEngineEvent;
47 void removeListener(IN int cqid)
49 m_mapListener.erase(cqid);
53 CSimpleMutex m_mtxListener;
54 std::map<int, IQueryEngineEvent *> m_mapListener;
57 IQueryEngine *g_pQueryEngineInstance = NULL;
58 SSMCoreEventReceiver *g_pEventReceiver = NULL;
60 SSMInterface::SSMInterface()
62 std::string xmlDescription = "<SSMCore>"
64 "<UDN>abcde123-31f8-11b4-a222-08002b34c003</UDN>"
70 SSMRESULT res = SSM_E_FAIL;
72 g_pEventReceiver = new SSMCoreEventReceiver();
73 SSM_CLEANUP_NULL_ASSERT(g_pEventReceiver);
74 SSM_CLEANUP_ASSERT(InitializeSSMCore(xmlDescription));
75 SSM_CLEANUP_ASSERT(StartSSMCore());
76 SSM_CLEANUP_ASSERT(CreateQueryEngine(&g_pQueryEngineInstance));
77 SSM_CLEANUP_ASSERT(g_pQueryEngineInstance->registerQueryEvent(g_pEventReceiver));
82 SSMInterface::~SSMInterface()
84 SSMRESULT res = SSM_E_FAIL;
86 SSM_CLEANUP_ASSERT(g_pQueryEngineInstance->unregisterQueryEvent(g_pEventReceiver));
87 ReleaseQueryEngine(g_pQueryEngineInstance);
88 g_pQueryEngineInstance = NULL;
89 SSM_CLEANUP_ASSERT(StopSSMCore());
90 SSM_CLEANUP_ASSERT(TerminateSSMCore());
93 SAFE_DELETE(g_pEventReceiver);
96 SSMRESULT SSMInterface::registerQuery(IN std::string queryString, IN IQueryEngineEvent *listener,
99 SSMRESULT res = SSM_E_FAIL;
101 g_pEventReceiver->lockListener();
102 SSM_CLEANUP_ASSERT(g_pQueryEngineInstance->executeContextQuery(queryString, &cqid));
103 g_pEventReceiver->addListener(cqid, listener);
106 g_pEventReceiver->unlockListener();
110 SSMRESULT SSMInterface::unregisterQuery(IN int cqid)
112 SSMRESULT res = SSM_E_FAIL;
114 g_pEventReceiver->lockListener();
115 SSM_CLEANUP_ASSERT(g_pQueryEngineInstance->killContextQuery(cqid));
116 g_pEventReceiver->removeListener(cqid);
119 g_pEventReceiver->unlockListener();