126 lines · 4.0 KB · C
RawDownload
////  EntityScriptServer.h//  assignment-client/src/scripts////  Created by Clément Brisset on 1/5/17.//  Copyright 2013 High Fidelity, Inc.//  Copyright 2023 Overte e.V.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html//  SPDX-License-Identifier: Apache-2.0// #ifndef hifi_EntityScriptServer_h#define hifi_EntityScriptServer_h #include <set>#include <vector> #include <QtCore/QObject>#include <QtCore/QSharedPointer>#include <QtCore/QUuid>#include <QtCore/QSharedPointer> #include <EntityEditPacketSender.h>#include <plugins/CodecPlugin.h>#include <SimpleEntitySimulation.h>#include <ThreadedAssignment.h>#include <ScriptManager.h>#include <ScriptMessage.h>#include <QJsonArray> #include "../entities/EntityTreeHeadlessViewer.h" 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<ReceivedMessage> message, SharedNodePointer senderNode);    void handleSelectedAudioFormat(QSharedPointer<ReceivedMessage> message);     void handleReloadEntityServerScriptPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);    void handleEntityScriptGetStatusPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);     void handleSettings();    void updateEntityPPS();     /**         * @brief Handles log subscribe/unsubscribe requests         *         * Clients can subscribe to logs by sending a script log packet. Entity Script Server keeps list of subscribers         * and sends them logs in JSON format.         */     void handleEntityServerScriptLogPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);     /**         * @brief Transmit logs         *         * This is called periodically through a timer to transmit logs from scripts.         */     void pushLogs();     /**         * @brief Adds log entry to the transmit buffer         *         * This is connected to entity script log events in the script manager and adds script log message to the buffer         * containing messages that will be sent to subscribed clients.         */     void addLogEntry(const QString& message, const QString& fileName, int lineNumber, const EntityItemID& entityID, ScriptMessage::Severity severity);     void handleEntityScriptCallMethodPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);  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, const QString& oldScriptURL, const QString& newScriptURL);    void checkAndCallPreload(const EntityItemID& entityID, const QString& oldScriptURL, const QString& newScriptURL);     void cleanupOldKilledListeners();     bool _shuttingDown { false };     static int _entitiesScriptEngineCount;    ScriptManagerPointer _entitiesScriptManager;    SimpleEntitySimulationPointer _entitySimulation;    EntityEditPacketSender _entityEditSender;    EntityTreeHeadlessViewer _entityViewer;     QJsonArray _logBuffer;    std::mutex _logBufferMutex;     int _maxEntityPPS { DEFAULT_MAX_ENTITY_PPS };    int _entityPPSPerScript { DEFAULT_ENTITY_PPS_PER_SCRIPT };     std::set<QUuid> _logListeners;    std::vector<std::pair<QUuid, quint64>> _killedListeners;     QString _selectedCodecName;    CodecPluginPointer _codec;    Encoder* _encoder { nullptr };}; #endif // hifi_EntityScriptServer_h