2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 #ifndef _TIZEN_DATACONTROL_ASYNC_CALLBACK_MANAGER_H_
19 #define _TIZEN_DATACONTROL_ASYNC_CALLBACK_MANAGER_H_
21 #include <dpl/singleton.h>
22 #include <AsyncCallbackManager.h>
23 #include <dpl/mutex.h>
24 #include "DataControlPendingEvent.h"
28 namespace DataControl {
30 class DataControlAsyncCallbackManager : public DeviceAPI::Common::AsyncCallbackManager
33 DataControlAsyncCallbackManager()
37 virtual ~DataControlAsyncCallbackManager()
42 bool isDataControlGC(void* address)
46 if (m_dataControlGCMap.find(address) == m_dataControlGCMap.end())
51 return m_dataControlGCMap[address];
54 void setDataControlGC(void* address, bool gc)
58 DPL::Mutex::ScopedLock lock(&m_mutex);
59 if (gc && m_dataControlGCMap.find(address) != m_dataControlGCMap.end())
61 m_dataControlGCMap.erase(address);
63 m_dataControlGCMap[address] = gc;
67 bool checkRequestIpcOperation()
69 // return m_callbackUserDataMap.empty();
71 if (m_callbackUserDataMap.size() < 128)
77 void* getRemainingIpcOperation()
82 if (m_callbackUserDataMap.empty() == false)
84 std::string key = m_reqIdVector[0];
85 retPtr = m_callbackUserDataMap[key];
90 bool checkReqIdUnique(std::string key)
92 if (m_callbackUserDataMap.find(key) == m_callbackUserDataMap.end())
100 void addSQLUserData(std::string key, void* data)
102 if (m_callbackUserDataMap.find(key) != m_callbackUserDataMap.end())
104 ThrowMsg(WrtDeviceApis::Commons::PlatformException, "same id exist");
107 m_reqIdVector.push_back(key);
109 LoggerD("Add OK ReqId : " << key);
111 DPL::Mutex::ScopedLock lock(&m_mutex);
112 m_callbackUserDataMap[key] = data;
115 void* removeSQLUserData(std::string key)
118 if (m_callbackUserDataMap.find(key) == m_callbackUserDataMap.end())
120 LoggerD("Fail ReqId : " << key);
121 ThrowMsg(WrtDeviceApis::Commons::PlatformException, "there is no key");
125 DPL::Mutex::ScopedLock lock(&m_mutex);
126 void* data = m_callbackUserDataMap[key];
128 // LoggerD(key << " : " << std::hex << data);
130 m_callbackUserDataMap.erase(key);
132 for (index = 0; index < m_reqIdVector.size(); index++)
134 if (m_reqIdVector[index] == key)
136 m_reqIdVector.erase(m_reqIdVector.begin() + index);
145 friend class DPL::Singleton<DataControlAsyncCallbackManager>;
148 void cleanupUserData()
150 for (std::map<std::string, void*>::iterator it = m_callbackUserDataMap.begin();
151 it != m_callbackUserDataMap.end(); ++it)
153 CommonPendingEvent *event = (CommonPendingEvent*)it->second;
155 EventInsertPendingEvent *insertEvent = dynamic_cast<EventInsertPendingEvent*>(event);
159 LoggerD("free insert");
165 EventSelectPendingEvent *selectEvent = dynamic_cast<EventSelectPendingEvent*>(event);
169 LoggerD("free select");
174 EventUpdatePendingEvent *updateEvent = dynamic_cast<EventUpdatePendingEvent*>(event);
178 LoggerD("free update");
183 EventDeletePendingEvent *deleteEvent = dynamic_cast<EventDeletePendingEvent*>(event);
187 LoggerD("free delete");
191 EventAddValuePendingEvent *addValueEvent = dynamic_cast<EventAddValuePendingEvent*>(event);
195 LoggerD("free addValue");
196 delete addValueEvent;
201 EventGetValuePendingEvent *getValueEvent = dynamic_cast<EventGetValuePendingEvent*>(event);
205 LoggerD("free getValue");
206 delete getValueEvent;
210 EventUpdateValuePendingEvent *updateValueEvent = dynamic_cast<EventUpdateValuePendingEvent*>(event);
212 if (updateValueEvent)
214 LoggerD("free updateValue");
215 delete updateValueEvent;
219 EventRemoveValuePendingEvent *removeValueEvent = dynamic_cast<EventRemoveValuePendingEvent*>(event);
221 if (removeValueEvent)
223 LoggerD("free removeValue");
224 delete removeValueEvent;
229 std::map<void*, bool> m_dataControlGCMap;
230 std::map<std::string, void*> m_callbackUserDataMap;
231 std::vector<std::string> m_reqIdVector;
235 typedef DPL::Singleton<DataControlAsyncCallbackManager> DataControlAsyncCallbackManagerSingleton;