12 #ifndef hifi_OctreeEditPacketSender_h
13 #define hifi_OctreeEditPacketSender_h
15 #include <unordered_map>
17 #include <PacketSender.h>
18 #include <udt/PacketHeaders.h>
20 #include "SentPacketHistory.h"
50 virtual bool process()
override;
60 static const int DEFAULT_MAX_PENDING_MESSAGES;
63 bool serversExist()
const;
66 virtual char getMyNodeType()
const = 0;
67 virtual void adjustEditPacketForClockSkew(PacketType type, QByteArray& buffer, qint64 clockSkew) { }
69 void processNackPacket(ReceivedMessage& message, SharedNodePointer sendingNode);
72 void nodeKilled(SharedNodePointer node);
75 using EditMessagePair = std::pair<PacketType, QByteArray>;
77 void queuePacketToNode(
const QUuid& nodeID, std::unique_ptr<NLPacket> packet);
78 void queuePacketListToNode(
const QUuid& nodeUUID, std::unique_ptr<NLPacketList> packetList);
80 void queuePendingPacketToNodes(std::unique_ptr<NLPacket> packet);
81 void queuePacketToNodes(std::unique_ptr<NLPacket> packet);
82 std::unique_ptr<NLPacket> initializePacket(PacketType type, qint64 nodeClockSkew);
83 void releaseQueuedPacket(
const QUuid& nodeUUID, std::unique_ptr<NLPacket> packetBuffer);
84 void releaseQueuedPacketList(
const QUuid& nodeID, std::unique_ptr<NLPacketList> packetList);
86 void processPreServerExistsPackets();
90 std::unordered_map<QUuid, PacketOrPacketList> _pendingEditPackets;
93 int _maxPendingMessages;
94 bool _releaseQueuedMessagesPending;
95 QMutex _pendingPacketsLock;
96 QRecursiveMutex _packetsQueueLock;
97 std::list<EditMessagePair> _preServerEdits;
98 std::list<std::unique_ptr<NLPacket>> _preServerSingleMessagePackets;
100 QMutex _releaseQueuedPacketMutex;
103 std::unordered_map<QUuid, SentPacketHistory> _sentPacketHistories;
104 std::unordered_map<QUuid, quint16> _outgoingSequenceNumbers;
Utility for processing, packing, queueing and sending of outbound edit messages.
Definition: OctreeEditPacketSender.h:23
void setMaxPendingMessages(int maxPendingMessages)
Definition: OctreeEditPacketSender.h:57
void queueOctreeEditMessage(PacketType type, QByteArray &editMessage)
Definition: OctreeEditPacketSender.cpp:163
void releaseQueuedMessages()
Definition: OctreeEditPacketSender.cpp:255
virtual bool process() override
if you're running in non-threaded mode, you must call this method regularly
Definition: OctreeEditPacketSender.cpp:318
Generalized threaded processor for queueing and sending of outbound packets.
Definition: PacketSender.h:24