// // EntityScriptServer.h // assignment-client/src/scripts // // Created by Clément Brisset on 1/5/17. // Copyright 2013 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #ifndef hifi_EntityScriptServer_h #define hifi_EntityScriptServer_h #include #include #include #include #include #include #include #include #include static const int DEFAULT_MAX_ENTITY_PPS = 9000; static const int DEFAULT_ENTITY_PPS_PER_SCRIPT = 900; class EntityScriptServer : public ThreadedAssignment { Q_OBJECT public: EntityScriptServer(ReceivedMessage& message); ~EntityScriptServer(); virtual void aboutToFinish() override; public slots: void run() override; void nodeActivated(SharedNodePointer activatedNode); void nodeKilled(SharedNodePointer killedNode); void sendStatsPacket() override; private slots: void handleOctreePacket(QSharedPointer message, SharedNodePointer senderNode); void handleJurisdictionPacket(QSharedPointer message, SharedNodePointer senderNode); void handleSelectedAudioFormat(QSharedPointer message); void handleReloadEntityServerScriptPacket(QSharedPointer message, SharedNodePointer senderNode); void handleEntityScriptGetStatusPacket(QSharedPointer message, SharedNodePointer senderNode); void handleSettings(); void updateEntityPPS(); void handleEntityServerScriptLogPacket(QSharedPointer message, SharedNodePointer senderNode); void pushLogs(); private: void negotiateAudioFormat(); void selectAudioFormat(const QString& selectedCodecName); void resetEntitiesScriptEngine(); void clear(); void shutdownScriptEngine(); void addingEntity(const EntityItemID& entityID); void deletingEntity(const EntityItemID& entityID); void entityServerScriptChanging(const EntityItemID& entityID, bool reload); void checkAndCallPreload(const EntityItemID& entityID, bool reload = false); void cleanupOldKilledListeners(); bool _shuttingDown { false }; static int _entitiesScriptEngineCount; QSharedPointer _entitiesScriptEngine; EntityEditPacketSender _entityEditSender; EntityTreeHeadlessViewer _entityViewer; int _maxEntityPPS { DEFAULT_MAX_ENTITY_PPS }; int _entityPPSPerScript { DEFAULT_ENTITY_PPS_PER_SCRIPT }; std::set _logListeners; std::vector> _killedListeners; QString _selectedCodecName; CodecPluginPointer _codec; Encoder* _encoder { nullptr }; }; #endif // hifi_EntityScriptServer_h