Overte C++ Documentation
EntityServer.h
1 //
2 // EntityServer.h
3 // assignment-client/src/entities
4 //
5 // Created by Brad Hefta-Gaub on 4/29/14
6 // Copyright 2014 High Fidelity, Inc.
7 //
8 // Distributed under the Apache License, Version 2.0.
9 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10 //
11 
12 #ifndef hifi_EntityServer_h
13 #define hifi_EntityServer_h
14 
15 #include "../octree/OctreeServer.h"
16 
17 #include <QtCore/QSharedPointer>
18 
19 #include <memory>
20 
21 #include <EntityItem.h>
22 #include <EntityTree.h>
23 #include <SimpleEntitySimulation.h>
24 
25 #include "EntityServerConsts.h"
26 
28 
30  quint64 lastSent;
31  quint64 lastEdited;
32 };
33 
34 class EntityServer : public OctreeServer, public NewlyCreatedEntityHook {
35  Q_OBJECT
36 public:
37  EntityServer(ReceivedMessage& message);
38  ~EntityServer();
39 
40  // Subclasses must implement these methods
41  virtual std::unique_ptr<OctreeQueryNode> createOctreeQueryNode() override;
42  virtual char getMyNodeType() const override { return NodeType::EntityServer; }
43  virtual PacketType getMyQueryMessageType() const override { return PacketType::EntityQuery; }
44  virtual const char* getMyServerName() const override { return MODEL_SERVER_NAME; }
45  virtual const char* getMyLoggingServerTargetName() const override { return MODEL_SERVER_LOGGING_TARGET_NAME; }
46  virtual const char* getMyDefaultPersistFilename() const override { return LOCAL_MODELS_PERSIST_FILE; }
47  virtual PacketType getMyEditNackType() const override { return PacketType::EntityEditNack; }
48  virtual QString getMyDomainSettingsKey() const override { return QString("entity_server_settings"); }
49 
50  // subclass may implement these method
51  virtual void beforeRun() override;
52  virtual bool hasSpecialPacketsToSend(const SharedNodePointer& node) override;
53  virtual int sendSpecialPackets(const SharedNodePointer& node, OctreeQueryNode* queryNode, int& packetsSent) override;
54 
55  virtual void entityCreated(const EntityItem& newEntity, const SharedNodePointer& senderNode) override;
56  virtual void readAdditionalConfiguration(const QJsonObject& settingsSectionObject) override;
57  virtual QString serverSubclassStats() override;
58 
59  virtual void trackSend(const QUuid& dataID, quint64 dataLastEdited, const QUuid& sessionID) override;
60  virtual void trackViewerGone(const QUuid& sessionID) override;
61 
62  virtual void aboutToFinish() override;
63 
64 public slots:
65  virtual void nodeAdded(SharedNodePointer node) override;
66  virtual void nodeKilled(SharedNodePointer node) override;
67  void pruneDeletedEntities();
68  void entityFilterAdded(EntityItemID id, bool success);
69 
70 protected:
71  virtual OctreePointer createTree() override;
72  virtual UniqueSendThread newSendThread(const SharedNodePointer& node) override;
73 
74 private slots:
75  void handleEntityPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
76  void domainSettingsRequestFailed();
77 
78 private:
79  SimpleEntitySimulationPointer _entitySimulation;
80  QTimer* _pruneDeletedEntitiesTimer = nullptr;
81 
82  QReadWriteLock _viewerSendingStatsLock;
83  QMap<QUuid, QMap<QUuid, ViewerSendingStats>> _viewerSendingStats;
84 };
85 
86 #endif // hifi_EntityServer_h
Definition: EntityItem.h:82
Abstract ID for editing model items. Used in EntityItem JS API.
Definition: EntityItemID.h:28
Handles assignments of type OctreeServer - sending octrees to various clients.
Definition: OctreeServer.h:38
Handles assignments of type EntityServer - sending entities to various clients.
Definition: EntityServer.h:29