History

Script API for subscribing to entity server messages

ksuprynowicz committed 2 years ago

Commit c311d3c1 parent d75efdb7 files · +132 −10Browse files

Showing the changes to libraries/script-engine/src/ScriptEngines.cpp (1 of 7 files). Show all

Unified · Split

libraries/script-engine/src/ScriptEngines.cpp+61−0
@@ -158,8 +158,69 @@ void ScriptEngines::removeScriptEngine(ScriptManagerPointer manager) { · 157 unmodified lines
158 QMutexLocker locker(&_allScriptsMutex);158 QMutexLocker locker(&_allScriptsMutex);
159 _allKnownScriptManagers.remove(manager);159 _allKnownScriptManagers.remove(manager);
160 }160 }
161 std::lock_guard<std::mutex> lock(_subscriptionsToEntityScriptMessagesMutex);
162 _managersSubscribedToEntityScriptMessages.remove(manager.get());
163 _entitiesSubscribedToEntityScriptMessages.remove(manager.get());
164}
165
166void ScriptEngines::requestServerEntityScriptMessages(ScriptManager *manager) {
167 std::lock_guard<std::mutex> lock(_subscriptionsToEntityScriptMessagesMutex);
168 if (!_managersSubscribedToEntityScriptMessages.contains(manager)) {
169 _managersSubscribedToEntityScriptMessages.insert(manager);
170 // Emit a signal to inform EntityScriptServerLogClient about subscription request
171 emit requestingEntityScriptServerLog(true);
172 qDebug() << "ScriptEngines::requestServerEntityScriptMessages";
173 }
174}
175
176void ScriptEngines::requestServerEntityScriptMessages(ScriptManager *manager, const QUuid& entityID) {
177 std::lock_guard<std::mutex> lock(_subscriptionsToEntityScriptMessagesMutex);
178 if (!_entitiesSubscribedToEntityScriptMessages.contains(manager)) {
179 _entitiesSubscribedToEntityScriptMessages.insert(manager,QSet<QUuid>());
180 }
181 if (!_entitiesSubscribedToEntityScriptMessages[manager].contains(entityID)) {
182 _entitiesSubscribedToEntityScriptMessages[manager].insert(entityID);
183 // Emit a signal to inform EntityScriptServerLogClient about subscription request
184 emit requestingEntityScriptServerLog(true);
185 qDebug() << "ScriptEngines::requestServerEntityScriptMessages uuid";
186 }
187}
188
189void ScriptEngines::removeServerEntityScriptMessagesRequest(ScriptManager *manager) {
190 std::lock_guard<std::mutex> lock(_subscriptionsToEntityScriptMessagesMutex);
191 if (_managersSubscribedToEntityScriptMessages.contains(manager)) {
192 _managersSubscribedToEntityScriptMessages.remove(manager);
193 }
194 if (_entitiesSubscribedToEntityScriptMessages.isEmpty()
195 && _managersSubscribedToEntityScriptMessages.isEmpty()) {
196 // No managers requiring entity script server messages remain, so we inform EntityScriptServerLogClient about this
197 // Emit a signal to inform EntityScriptServerLogClient about subscription request
198 emit requestingEntityScriptServerLog(false);
199 qDebug() << "ScriptEngines::removeServerEntityScriptMessagesRequest";
200 }
161}201}
162 202
203void ScriptEngines::removeServerEntityScriptMessagesRequest(ScriptManager *manager, const QUuid& entityID) {
204 std::lock_guard<std::mutex> lock(_subscriptionsToEntityScriptMessagesMutex);
205 if (!_entitiesSubscribedToEntityScriptMessages.contains(manager)) {
206 return;
207 }
208 if (_entitiesSubscribedToEntityScriptMessages[manager].contains(entityID)) {
209 _entitiesSubscribedToEntityScriptMessages[manager].remove(entityID);
210 }
211 if (_entitiesSubscribedToEntityScriptMessages[manager].isEmpty()) {
212 _entitiesSubscribedToEntityScriptMessages.remove(manager);
213 }
214 if (_entitiesSubscribedToEntityScriptMessages.isEmpty()
215 && _managersSubscribedToEntityScriptMessages.isEmpty()) {
216 // No managers requiring entity script server messages remain, so we inform EntityScriptServerLogClient about this
217 // Emit a signal to inform EntityScriptServerLogClient about subscription request
218 emit requestingEntityScriptServerLog(false);
219 qDebug() << "ScriptEngines::removeServerEntityScriptMessagesRequest uuid";
220 }
221}
222
223
163void ScriptEngines::shutdownScripting() {224void ScriptEngines::shutdownScripting() {
164 _isStopped = true;225 _isStopped = true;
165 QMutexLocker locker(&_allScriptsMutex);226 QMutexLocker locker(&_allScriptsMutex);