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
158158 QMutexLocker locker(&_allScriptsMutex);
159159 _allKnownScriptManagers.remove(manager);
160160 }
161+ std::lock_guard<std::mutex> lock(_subscriptionsToEntityScriptMessagesMutex);
162+ _managersSubscribedToEntityScriptMessages.remove(manager.get());
163+ _entitiesSubscribedToEntityScriptMessages.remove(manager.get());
164+}
165+
166+void 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+
176+void 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+
189+void 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+ }
161201 }
162202
203+void 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+
163224 void ScriptEngines::shutdownScripting() {
164225 _isStopped = true;
165226 QMutexLocker locker(&_allScriptsMutex);