mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 10:37:56 +02:00
cleanup
This commit is contained in:
parent
c27a127739
commit
034debc483
5 changed files with 11 additions and 88 deletions
|
@ -34,14 +34,7 @@ const int MESSAGES_MIXER_BROADCAST_FRAMES_PER_SECOND = 60;
|
||||||
const unsigned int MESSAGES_DATA_SEND_INTERVAL_MSECS = (1.0f / (float) MESSAGES_MIXER_BROADCAST_FRAMES_PER_SECOND) * 1000;
|
const unsigned int MESSAGES_DATA_SEND_INTERVAL_MSECS = (1.0f / (float) MESSAGES_MIXER_BROADCAST_FRAMES_PER_SECOND) * 1000;
|
||||||
|
|
||||||
MessagesMixer::MessagesMixer(NLPacket& packet) :
|
MessagesMixer::MessagesMixer(NLPacket& packet) :
|
||||||
ThreadedAssignment(packet),
|
ThreadedAssignment(packet)
|
||||||
_lastFrameTimestamp(QDateTime::currentMSecsSinceEpoch()),
|
|
||||||
_trailingSleepRatio(1.0f),
|
|
||||||
_performanceThrottlingRatio(0.0f),
|
|
||||||
_sumListeners(0),
|
|
||||||
_numStatFrames(0),
|
|
||||||
_sumBillboardPackets(0),
|
|
||||||
_sumIdentityPackets(0)
|
|
||||||
{
|
{
|
||||||
// make sure we hear about node kills so we can tell the other nodes
|
// make sure we hear about node kills so we can tell the other nodes
|
||||||
connect(DependencyManager::get<NodeList>().data(), &NodeList::nodeKilled, this, &MessagesMixer::nodeKilled);
|
connect(DependencyManager::get<NodeList>().data(), &NodeList::nodeKilled, this, &MessagesMixer::nodeKilled);
|
||||||
|
@ -55,43 +48,14 @@ MessagesMixer::MessagesMixer(NLPacket& packet) :
|
||||||
MessagesMixer::~MessagesMixer() {
|
MessagesMixer::~MessagesMixer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// An 80% chance of sending a identity packet within a 5 second interval.
|
|
||||||
// assuming 60 htz update rate.
|
|
||||||
const float BILLBOARD_AND_IDENTITY_SEND_PROBABILITY = 1.0f / 187.0f;
|
|
||||||
|
|
||||||
void MessagesMixer::nodeKilled(SharedNodePointer killedNode) {
|
void MessagesMixer::nodeKilled(SharedNodePointer killedNode) {
|
||||||
qDebug() << "MessagesMixer::nodeKilled()... node:" << killedNode->getUUID();
|
qDebug() << "MessagesMixer::nodeKilled()... node:" << killedNode->getUUID();
|
||||||
|
// FIXME - remove the node from the subscription maps
|
||||||
if (killedNode->getType() == NodeType::Agent
|
|
||||||
&& killedNode->getLinkedData()) {
|
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
|
||||||
|
|
||||||
// we also want to remove sequence number data for this avatar on our other avatars
|
|
||||||
// so invoke the appropriate method on the MessagesMixerClientData for other avatars
|
|
||||||
nodeList->eachMatchingNode(
|
|
||||||
[&](const SharedNodePointer& node)->bool {
|
|
||||||
if (!node->getLinkedData()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (node->getUUID() == killedNode->getUUID()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
[&](const SharedNodePointer& node) {
|
|
||||||
qDebug() << "eachMatchingNode()... node:" << node->getUUID();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesMixer::handleMessages(QSharedPointer<NLPacketList> packetList, SharedNodePointer senderNode) {
|
void MessagesMixer::handleMessages(QSharedPointer<NLPacketList> packetList, SharedNodePointer senderNode) {
|
||||||
Q_ASSERT(packetList->getType() == PacketType::MessagesData);
|
Q_ASSERT(packetList->getType() == PacketType::MessagesData);
|
||||||
|
|
||||||
qDebug() << "MessagesMixer::handleMessages()... senderNode:" << senderNode->getUUID();
|
|
||||||
|
|
||||||
QByteArray packetData = packetList->getMessage();
|
QByteArray packetData = packetList->getMessage();
|
||||||
QBuffer packet{ &packetData };
|
QBuffer packet{ &packetData };
|
||||||
packet.open(QIODevice::ReadOnly);
|
packet.open(QIODevice::ReadOnly);
|
||||||
|
@ -109,14 +73,6 @@ void MessagesMixer::handleMessages(QSharedPointer<NLPacketList> packetList, Shar
|
||||||
|
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
qDebug() << "got a messages:" << message << "on channel:" << channel << "from node:" << senderNode->getUUID();
|
|
||||||
|
|
||||||
// this was an avatar we were sending to other people
|
|
||||||
// send a kill packet for it to our other nodes
|
|
||||||
//auto killPacket = NLPacket::create(PacketType::KillAvatar, NUM_BYTES_RFC4122_UUID);
|
|
||||||
//killPacket->write(killedNode->getUUID().toRfc4122());
|
|
||||||
//nodeList->broadcastToNodes(std::move(killPacket), NodeSet() << NodeType::Agent);
|
|
||||||
|
|
||||||
nodeList->eachMatchingNode(
|
nodeList->eachMatchingNode(
|
||||||
[&](const SharedNodePointer& node)->bool {
|
[&](const SharedNodePointer& node)->bool {
|
||||||
|
|
||||||
|
@ -125,8 +81,6 @@ void MessagesMixer::handleMessages(QSharedPointer<NLPacketList> packetList, Shar
|
||||||
},
|
},
|
||||||
[&](const SharedNodePointer& node) {
|
[&](const SharedNodePointer& node) {
|
||||||
|
|
||||||
qDebug() << "sending a messages:" << message << "on channel:" << channel << "to node:" << node->getUUID();
|
|
||||||
|
|
||||||
auto packetList = NLPacketList::create(PacketType::MessagesData, QByteArray(), true, true);
|
auto packetList = NLPacketList::create(PacketType::MessagesData, QByteArray(), true, true);
|
||||||
|
|
||||||
auto channelUtf8 = channel.toUtf8();
|
auto channelUtf8 = channel.toUtf8();
|
||||||
|
@ -163,47 +117,37 @@ void MessagesMixer::handleMessagesUnsubscribe(QSharedPointer<NLPacketList> packe
|
||||||
// FIXME - make these stats relevant
|
// FIXME - make these stats relevant
|
||||||
void MessagesMixer::sendStatsPacket() {
|
void MessagesMixer::sendStatsPacket() {
|
||||||
QJsonObject statsObject;
|
QJsonObject statsObject;
|
||||||
statsObject["average_listeners_last_second"] = (float) _sumListeners / (float) _numStatFrames;
|
|
||||||
statsObject["trailing_sleep_percentage"] = _trailingSleepRatio * 100;
|
|
||||||
statsObject["performance_throttling_ratio"] = _performanceThrottlingRatio;
|
|
||||||
|
|
||||||
QJsonObject messagesObject;
|
QJsonObject messagesObject;
|
||||||
|
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
// add stats for each listerner
|
// add stats for each listerner
|
||||||
nodeList->eachNode([&](const SharedNodePointer& node) {
|
nodeList->eachNode([&](const SharedNodePointer& node) {
|
||||||
QJsonObject messagesStats;
|
QJsonObject messagesStats;
|
||||||
|
|
||||||
const QString NODE_OUTBOUND_KBPS_STAT_KEY = "outbound_kbps";
|
|
||||||
const QString NODE_INBOUND_KBPS_STAT_KEY = "inbound_kbps";
|
|
||||||
|
|
||||||
// add the key to ask the domain-server for a username replacement, if it has it
|
// add the key to ask the domain-server for a username replacement, if it has it
|
||||||
messagesStats[USERNAME_UUID_REPLACEMENT_STATS_KEY] = uuidStringWithoutCurlyBraces(node->getUUID());
|
messagesStats[USERNAME_UUID_REPLACEMENT_STATS_KEY] = uuidStringWithoutCurlyBraces(node->getUUID());
|
||||||
messagesStats[NODE_OUTBOUND_KBPS_STAT_KEY] = node->getOutboundBandwidth();
|
messagesStats["outbound_kbps"] = node->getOutboundBandwidth();
|
||||||
messagesStats[NODE_INBOUND_KBPS_STAT_KEY] = node->getInboundBandwidth();
|
messagesStats["inbound_kbps"] = node->getInboundBandwidth();
|
||||||
|
|
||||||
messagesObject[uuidStringWithoutCurlyBraces(node->getUUID())] = messagesStats;
|
messagesObject[uuidStringWithoutCurlyBraces(node->getUUID())] = messagesStats;
|
||||||
});
|
});
|
||||||
|
|
||||||
statsObject["messages"] = messagesObject;
|
statsObject["messages"] = messagesObject;
|
||||||
ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject);
|
ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject);
|
||||||
|
|
||||||
_sumListeners = 0;
|
|
||||||
_numStatFrames = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesMixer::run() {
|
void MessagesMixer::run() {
|
||||||
ThreadedAssignment::commonInit(MESSAGES_MIXER_LOGGING_NAME, NodeType::MessagesMixer);
|
ThreadedAssignment::commonInit(MESSAGES_MIXER_LOGGING_NAME, NodeType::MessagesMixer);
|
||||||
|
|
||||||
NodeType_t owningNodeType = DependencyManager::get<NodeList>()->getOwnerType();
|
NodeType_t owningNodeType = DependencyManager::get<NodeList>()->getOwnerType();
|
||||||
qDebug() << "owningNodeType:" << owningNodeType;
|
|
||||||
|
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
nodeList->addNodeTypeToInterestSet(NodeType::Agent);
|
nodeList->addNodeTypeToInterestSet(NodeType::Agent);
|
||||||
|
|
||||||
|
/*
|
||||||
nodeList->linkedDataCreateCallback = [] (Node* node) {
|
nodeList->linkedDataCreateCallback = [] (Node* node) {
|
||||||
// no need to link data
|
// no need to link data
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
// wait until we have the domain-server settings, otherwise we bail
|
// wait until we have the domain-server settings, otherwise we bail
|
||||||
DomainHandler& domainHandler = nodeList->getDomainHandler();
|
DomainHandler& domainHandler = nodeList->getDomainHandler();
|
||||||
|
@ -228,13 +172,6 @@ void MessagesMixer::run() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesMixer::parseDomainServerSettings(const QJsonObject& domainSettings) {
|
void MessagesMixer::parseDomainServerSettings(const QJsonObject& domainSettings) {
|
||||||
qDebug() << "MessagesMixer::parseDomainServerSettings() domainSettings:" << domainSettings;
|
|
||||||
const QString MESSAGES_MIXER_SETTINGS_KEY = "messages_mixer";
|
|
||||||
|
|
||||||
// TODO - if we want options, parse them here...
|
// TODO - if we want options, parse them here...
|
||||||
//
|
const QString MESSAGES_MIXER_SETTINGS_KEY = "messages_mixer";
|
||||||
// QJsonValue nodeBandwidthValue = domainSettings[MESSAGES_MIXER_SETTINGS_KEY].toObject()[NODE_SEND_BANDWIDTH_KEY];
|
|
||||||
// if (!nodeBandwidthValue.isDouble()) {
|
|
||||||
// qDebug() << NODE_SEND_BANDWIDTH_KEY << "is not a double - will continue with default value";
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,18 +37,7 @@ private slots:
|
||||||
private:
|
private:
|
||||||
void parseDomainServerSettings(const QJsonObject& domainSettings);
|
void parseDomainServerSettings(const QJsonObject& domainSettings);
|
||||||
|
|
||||||
|
|
||||||
QHash<QString,QSet<QUuid>> _channelSubscribers;
|
QHash<QString,QSet<QUuid>> _channelSubscribers;
|
||||||
|
|
||||||
quint64 _lastFrameTimestamp;
|
|
||||||
|
|
||||||
float _trailingSleepRatio;
|
|
||||||
float _performanceThrottlingRatio;
|
|
||||||
|
|
||||||
int _sumListeners;
|
|
||||||
int _numStatFrames;
|
|
||||||
int _sumBillboardPackets;
|
|
||||||
int _sumIdentityPackets;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_MessagesMixer_h
|
#endif // hifi_MessagesMixer_h
|
||||||
|
|
|
@ -556,10 +556,10 @@
|
||||||
"assignment-types": [4],
|
"assignment-types": [4],
|
||||||
"settings": [
|
"settings": [
|
||||||
{
|
{
|
||||||
"name": "max_node_send_bandwidth",
|
"name": "unused",
|
||||||
"type": "double",
|
"type": "double",
|
||||||
"label": "Per-Node Bandwidth",
|
"label": "Unused setting",
|
||||||
"help": "Desired maximum send bandwidth (in Megabits per second) to each node",
|
"help": "an asofyet unused setting",
|
||||||
"placeholder": 1.0,
|
"placeholder": 1.0,
|
||||||
"default": 1.0,
|
"default": 1.0,
|
||||||
"advanced": true
|
"advanced": true
|
||||||
|
|
|
@ -132,7 +132,6 @@ void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant DomainServerSettingsManager::valueOrDefaultValueForKeyPath(const QString& keyPath) {
|
QVariant DomainServerSettingsManager::valueOrDefaultValueForKeyPath(const QString& keyPath) {
|
||||||
qDebug() << "DomainServerSettingsManager::valueOrDefaultValueForKeyPath() keyPath:" << keyPath;
|
|
||||||
const QVariant* foundValue = valueForKeyPath(_configMap.getMergedConfig(), keyPath);
|
const QVariant* foundValue = valueForKeyPath(_configMap.getMergedConfig(), keyPath);
|
||||||
|
|
||||||
if (foundValue) {
|
if (foundValue) {
|
||||||
|
@ -227,8 +226,6 @@ bool DomainServerSettingsManager::handleAuthenticatedHTTPRequest(HTTPConnection
|
||||||
}
|
}
|
||||||
|
|
||||||
QJsonObject DomainServerSettingsManager::responseObjectForType(const QString& typeValue, bool isAuthenticated) {
|
QJsonObject DomainServerSettingsManager::responseObjectForType(const QString& typeValue, bool isAuthenticated) {
|
||||||
qDebug() << "DomainServerSettingsManager::responseObjectForType() typeValue:" << typeValue;
|
|
||||||
|
|
||||||
QJsonObject responseObject;
|
QJsonObject responseObject;
|
||||||
|
|
||||||
if (!typeValue.isEmpty() || isAuthenticated) {
|
if (!typeValue.isEmpty() || isAuthenticated) {
|
||||||
|
|
|
@ -137,5 +137,5 @@ void MessagesClient::handleNodeKilled(SharedNodePointer node) {
|
||||||
if (node->getType() != NodeType::MessagesMixer) {
|
if (node->getType() != NodeType::MessagesMixer) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// FIXME - do we need to do any special bookkeeping for when the messages mixer is no longer available
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue