mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 11:28:03 +02:00
Merge branch 'protocol' of github.com:birarda/hifi into control-pair-probe
This commit is contained in:
commit
8d3788c2b6
8 changed files with 36 additions and 23 deletions
|
@ -457,8 +457,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
|
|
||||||
audioThread->start();
|
audioThread->start();
|
||||||
|
|
||||||
|
QThread* assetThread = new QThread;
|
||||||
QThread* assetThread = new QThread();
|
|
||||||
|
|
||||||
assetThread->setObjectName("Asset Thread");
|
assetThread->setObjectName("Asset Thread");
|
||||||
auto assetClient = DependencyManager::get<AssetClient>();
|
auto assetClient = DependencyManager::get<AssetClient>();
|
||||||
|
@ -467,7 +466,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
|
|
||||||
assetThread->start();
|
assetThread->start();
|
||||||
|
|
||||||
|
|
||||||
const DomainHandler& domainHandler = nodeList->getDomainHandler();
|
const DomainHandler& domainHandler = nodeList->getDomainHandler();
|
||||||
|
|
||||||
connect(&domainHandler, SIGNAL(hostnameChanged(const QString&)), SLOT(domainChanged(const QString&)));
|
connect(&domainHandler, SIGNAL(hostnameChanged(const QString&)), SLOT(domainChanged(const QString&)));
|
||||||
|
@ -878,6 +876,12 @@ Application::~Application() {
|
||||||
DependencyManager::destroy<GeometryCache>();
|
DependencyManager::destroy<GeometryCache>();
|
||||||
DependencyManager::destroy<ScriptCache>();
|
DependencyManager::destroy<ScriptCache>();
|
||||||
DependencyManager::destroy<SoundCache>();
|
DependencyManager::destroy<SoundCache>();
|
||||||
|
|
||||||
|
// cleanup the AssetClient thread
|
||||||
|
QThread* assetThread = DependencyManager::get<AssetClient>()->thread();
|
||||||
|
DependencyManager::destroy<AssetClient>();
|
||||||
|
assetThread->quit();
|
||||||
|
assetThread->wait();
|
||||||
|
|
||||||
QThread* nodeThread = DependencyManager::get<NodeList>()->thread();
|
QThread* nodeThread = DependencyManager::get<NodeList>()->thread();
|
||||||
|
|
||||||
|
@ -887,7 +891,7 @@ Application::~Application() {
|
||||||
// ask the node thread to quit and wait until it is done
|
// ask the node thread to quit and wait until it is done
|
||||||
nodeThread->quit();
|
nodeThread->quit();
|
||||||
nodeThread->wait();
|
nodeThread->wait();
|
||||||
|
|
||||||
Leapmotion::destroy();
|
Leapmotion::destroy();
|
||||||
RealSense::destroy();
|
RealSense::destroy();
|
||||||
ConnexionClient::getInstance().destroy();
|
ConnexionClient::getInstance().destroy();
|
||||||
|
|
|
@ -24,6 +24,11 @@ MessageID AssetClient::_currentID = 0;
|
||||||
|
|
||||||
|
|
||||||
AssetClient::AssetClient() {
|
AssetClient::AssetClient() {
|
||||||
|
|
||||||
|
setCustomDeleter([](Dependency* dependency){
|
||||||
|
static_cast<AssetClient*>(dependency)->deleteLater();
|
||||||
|
});
|
||||||
|
|
||||||
auto& packetReceiver = DependencyManager::get<NodeList>()->getPacketReceiver();
|
auto& packetReceiver = DependencyManager::get<NodeList>()->getPacketReceiver();
|
||||||
packetReceiver.registerListener(PacketType::AssetGetInfoReply, this, "handleAssetGetInfoReply");
|
packetReceiver.registerListener(PacketType::AssetGetInfoReply, this, "handleAssetGetInfoReply");
|
||||||
packetReceiver.registerMessageListener(PacketType::AssetGetReply, this, "handleAssetGetReply");
|
packetReceiver.registerMessageListener(PacketType::AssetGetReply, this, "handleAssetGetReply");
|
||||||
|
|
|
@ -66,7 +66,7 @@ LimitedNodeList::LimitedNodeList(unsigned short socketListenPort, unsigned short
|
||||||
|
|
||||||
firstCall = false;
|
firstCall = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
qRegisterMetaType<ConnectionStep>("ConnectionStep");
|
qRegisterMetaType<ConnectionStep>("ConnectionStep");
|
||||||
|
|
||||||
_nodeSocket.bind(QHostAddress::AnyIPv4, socketListenPort);
|
_nodeSocket.bind(QHostAddress::AnyIPv4, socketListenPort);
|
||||||
|
|
|
@ -853,30 +853,32 @@ void PendingReceivedMessage::enqueuePacket(std::unique_ptr<Packet> packet) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto sequenceNumber = packet->getSequenceNumber();
|
||||||
|
|
||||||
if (packet->getPacketPosition() == Packet::PacketPosition::FIRST) {
|
if (packet->getPacketPosition() == Packet::PacketPosition::FIRST) {
|
||||||
_hasFirstSequenceNumber = true;
|
_hasFirstSequenceNumber = true;
|
||||||
_firstSequenceNumber = packet->getSequenceNumber();
|
_firstSequenceNumber = sequenceNumber;
|
||||||
} else if (packet->getPacketPosition() == Packet::PacketPosition::LAST) {
|
} else if (packet->getPacketPosition() == Packet::PacketPosition::LAST) {
|
||||||
_hasLastSequenceNumber = true;
|
_hasLastSequenceNumber = true;
|
||||||
_lastSequenceNumber = packet->getSequenceNumber();
|
_lastSequenceNumber = sequenceNumber;
|
||||||
} else if (packet->getPacketPosition() == Packet::PacketPosition::ONLY) {
|
} else if (packet->getPacketPosition() == Packet::PacketPosition::ONLY) {
|
||||||
_hasFirstSequenceNumber = true;
|
_hasFirstSequenceNumber = true;
|
||||||
_hasLastSequenceNumber = true;
|
_hasLastSequenceNumber = true;
|
||||||
_firstSequenceNumber = packet->getSequenceNumber();
|
_firstSequenceNumber = sequenceNumber;
|
||||||
_lastSequenceNumber = packet->getSequenceNumber();
|
_lastSequenceNumber = sequenceNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
_packets.push_back(std::move(packet));
|
// Insert into the packets list in sorted order. Because we generally expect to receive packets in order, begin
|
||||||
|
// searching from the end of the list.
|
||||||
|
auto it = find_if(_packets.rbegin(), _packets.rend(),
|
||||||
|
[&](const std::unique_ptr<Packet>& packet) { return sequenceNumber > packet->getSequenceNumber(); });
|
||||||
|
}
|
||||||
|
_packets.insert(it.base(), std::move(packet));
|
||||||
|
|
||||||
if (_hasFirstSequenceNumber && _hasLastSequenceNumber) {
|
if (_hasFirstSequenceNumber && _hasLastSequenceNumber) {
|
||||||
auto numPackets = udt::seqlen(_firstSequenceNumber, _lastSequenceNumber);
|
auto numPackets = udt::seqlen(_firstSequenceNumber, _lastSequenceNumber);
|
||||||
if (uint64_t(numPackets) == _packets.size()) {
|
if (uint64_t(numPackets) == _packets.size()) {
|
||||||
_isComplete = true;
|
_isComplete = true;
|
||||||
|
|
||||||
// Sort packets by sequence number
|
|
||||||
_packets.sort([](std::unique_ptr<Packet>& a, std::unique_ptr<Packet>& b) {
|
|
||||||
return a->getSequenceNumber() < b->getSequenceNumber();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ std::unique_ptr<SendQueue> SendQueue::create(Socket* socket, HifiSockAddr destin
|
||||||
Q_ASSERT_X(socket, "SendQueue::create", "Must be called with a valid Socket*");
|
Q_ASSERT_X(socket, "SendQueue::create", "Must be called with a valid Socket*");
|
||||||
|
|
||||||
// Setup queue private thread
|
// Setup queue private thread
|
||||||
QThread* thread = new QThread();
|
QThread* thread = new QThread;
|
||||||
thread->setObjectName("Networking: SendQueue " + destination.objectName()); // Name thread for easier debug
|
thread->setObjectName("Networking: SendQueue " + destination.objectName()); // Name thread for easier debug
|
||||||
|
|
||||||
connect(thread, &QThread::started, queue.get(), &SendQueue::run);
|
connect(thread, &QThread::started, queue.get(), &SendQueue::run);
|
||||||
|
|
|
@ -28,7 +28,8 @@ Q_DECLARE_METATYPE(Packet*);
|
||||||
Q_DECLARE_METATYPE(PacketList*);
|
Q_DECLARE_METATYPE(PacketList*);
|
||||||
|
|
||||||
Socket::Socket(QObject* parent) :
|
Socket::Socket(QObject* parent) :
|
||||||
QObject(parent)
|
QObject(parent),
|
||||||
|
_synTimer(new QTimer(this))
|
||||||
{
|
{
|
||||||
qRegisterMetaType<Packet*>();
|
qRegisterMetaType<Packet*>();
|
||||||
qRegisterMetaType<PacketList*>();
|
qRegisterMetaType<PacketList*>();
|
||||||
|
@ -36,10 +37,10 @@ Socket::Socket(QObject* parent) :
|
||||||
connect(&_udpSocket, &QUdpSocket::readyRead, this, &Socket::readPendingDatagrams);
|
connect(&_udpSocket, &QUdpSocket::readyRead, this, &Socket::readPendingDatagrams);
|
||||||
|
|
||||||
// make sure our synchronization method is called every SYN interval
|
// make sure our synchronization method is called every SYN interval
|
||||||
connect(&_synTimer, &QTimer::timeout, this, &Socket::rateControlSync);
|
connect(_synTimer, &QTimer::timeout, this, &Socket::rateControlSync);
|
||||||
|
|
||||||
// start our timer for the synchronization time interval
|
// start our timer for the synchronization time interval
|
||||||
_synTimer.start(_synInterval);
|
_synTimer->start(_synInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Socket::rebind() {
|
void Socket::rebind() {
|
||||||
|
@ -300,10 +301,10 @@ void Socket::rateControlSync() {
|
||||||
connection.second->sync();
|
connection.second->sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_synTimer.interval() != _synInterval) {
|
if (_synTimer->interval() != _synInterval) {
|
||||||
// if the _synTimer interval doesn't match the current _synInterval (changes when the CC factory is changed)
|
// if the _synTimer interval doesn't match the current _synInterval (changes when the CC factory is changed)
|
||||||
// then restart it now with the right interval
|
// then restart it now with the right interval
|
||||||
_synTimer.start(_synInterval);
|
_synTimer->start(_synInterval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ private:
|
||||||
std::unordered_map<HifiSockAddr, std::unique_ptr<Connection>> _connectionsHash;
|
std::unordered_map<HifiSockAddr, std::unique_ptr<Connection>> _connectionsHash;
|
||||||
|
|
||||||
int _synInterval = 10; // 10ms
|
int _synInterval = 10; // 10ms
|
||||||
QTimer _synTimer;
|
QTimer* _synTimer;
|
||||||
|
|
||||||
std::unique_ptr<CongestionControlVirtualFactory> _ccFactory { new CongestionControlFactory<DefaultCC>() };
|
std::unique_ptr<CongestionControlVirtualFactory> _ccFactory { new CongestionControlFactory<DefaultCC>() };
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ GenericThread::GenericThread(QObject* parent) :
|
||||||
_stopThread(false),
|
_stopThread(false),
|
||||||
_isThreaded(false) // assume non-threaded, must call initialize()
|
_isThreaded(false) // assume non-threaded, must call initialize()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GenericThread::~GenericThread() {
|
GenericThread::~GenericThread() {
|
||||||
|
@ -32,7 +33,7 @@ void GenericThread::initialize(bool isThreaded, QThread::Priority priority) {
|
||||||
_isThreaded = isThreaded;
|
_isThreaded = isThreaded;
|
||||||
if (_isThreaded) {
|
if (_isThreaded) {
|
||||||
_thread = new QThread(this);
|
_thread = new QThread(this);
|
||||||
|
|
||||||
// match the thread name to our object name
|
// match the thread name to our object name
|
||||||
_thread->setObjectName(objectName());
|
_thread->setObjectName(objectName());
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue