Overte C++ Documentation
EntityScriptServer.h
1 //
2 // EntityScriptServer.h
3 // assignment-client/src/scripts
4 //
5 // Created by ClĂ©ment Brisset on 1/5/17.
6 // Copyright 2013 High Fidelity, Inc.
7 // Copyright 2023 Overte e.V.
8 //
9 // Distributed under the Apache License, Version 2.0.
10 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
11 // SPDX-License-Identifier: Apache-2.0
12 //
13 
14 #ifndef hifi_EntityScriptServer_h
15 #define hifi_EntityScriptServer_h
16 
17 #include <set>
18 #include <vector>
19 
20 #include <QtCore/QObject>
21 #include <QtCore/QSharedPointer>
22 #include <QtCore/QUuid>
23 #include <QtCore/QSharedPointer>
24 
25 #include <EntityEditPacketSender.h>
26 #include <plugins/CodecPlugin.h>
27 #include <SimpleEntitySimulation.h>
28 #include <ThreadedAssignment.h>
29 #include <ScriptManager.h>
30 #include <ScriptMessage.h>
31 #include <QJsonArray>
32 
33 #include "../entities/EntityTreeHeadlessViewer.h"
34 
35 class EntityScriptServer : public ThreadedAssignment {
36  Q_OBJECT
37 
38 public:
39  EntityScriptServer(ReceivedMessage& message);
40  ~EntityScriptServer();
41 
42  virtual void aboutToFinish() override;
43 
44 public slots:
45  void run() override;
46  void nodeActivated(SharedNodePointer activatedNode);
47  void nodeKilled(SharedNodePointer killedNode);
48  void sendStatsPacket() override;
49 
50 private slots:
51  void handleOctreePacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
52  void handleSelectedAudioFormat(QSharedPointer<ReceivedMessage> message);
53 
54  void handleReloadEntityServerScriptPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
55  void handleEntityScriptGetStatusPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
56 
57  void handleSettings();
58  void updateEntityPPS();
59 
67  void handleEntityServerScriptLogPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
68 
75  void pushLogs();
76 
84  void addLogEntry(const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID, ScriptMessage::Severity severity);
85 
86  void handleEntityScriptCallMethodPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
87 
88 
89 private:
90  void negotiateAudioFormat();
91  void selectAudioFormat(const QString& selectedCodecName);
92 
93  void resetEntitiesScriptEngine();
94  void clear();
95  void shutdownScriptEngine();
96 
97  void addingEntity(const EntityItemID& entityID);
98  void deletingEntity(const EntityItemID& entityID);
99  void entityServerScriptChanging(const EntityItemID& entityID, bool reload);
100  void checkAndCallPreload(const EntityItemID& entityID, bool forceRedownload = false);
101 
102  void cleanupOldKilledListeners();
103 
104  bool _shuttingDown { false };
105 
106  static int _entitiesScriptEngineCount;
107  ScriptManagerPointer _entitiesScriptManager;
108  SimpleEntitySimulationPointer _entitySimulation;
109  EntityEditPacketSender _entityEditSender;
110  EntityTreeHeadlessViewer _entityViewer;
111 
112  QJsonArray _logBuffer;
113  std::mutex _logBufferMutex;
114 
115  int _maxEntityPPS { DEFAULT_MAX_ENTITY_PPS };
116  int _entityPPSPerScript { DEFAULT_ENTITY_PPS_PER_SCRIPT };
117 
118  std::set<QUuid> _logListeners;
119  std::vector<std::pair<QUuid, quint64>> _killedListeners;
120 
121  QString _selectedCodecName;
122  CodecPluginPointer _codec;
123  Encoder* _encoder { nullptr };
124 };
125 
126 #endif // hifi_EntityScriptServer_h
Utility for processing, packing, queueing and sending of outbound edit voxel messages.
Definition: EntityEditPacketSender.h:25
Abstract ID for editing model items. Used in EntityItem JS API.
Definition: EntityItemID.h:28