This commit is contained in:
Brad Hefta-Gaub 2015-11-17 10:59:53 -08:00
parent c27a127739
commit 034debc483
5 changed files with 11 additions and 88 deletions

View file

@ -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;
MessagesMixer::MessagesMixer(NLPacket& packet) :
ThreadedAssignment(packet),
_lastFrameTimestamp(QDateTime::currentMSecsSinceEpoch()),
_trailingSleepRatio(1.0f),
_performanceThrottlingRatio(0.0f),
_sumListeners(0),
_numStatFrames(0),
_sumBillboardPackets(0),
_sumIdentityPackets(0)
ThreadedAssignment(packet)
{
// make sure we hear about node kills so we can tell the other nodes
connect(DependencyManager::get<NodeList>().data(), &NodeList::nodeKilled, this, &MessagesMixer::nodeKilled);
@ -55,43 +48,14 @@ MessagesMixer::MessagesMixer(NLPacket& packet) :
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) {
qDebug() << "MessagesMixer::nodeKilled()... node:" << killedNode->getUUID();
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();
}
);
}
// FIXME - remove the node from the subscription maps
}
void MessagesMixer::handleMessages(QSharedPointer<NLPacketList> packetList, SharedNodePointer senderNode) {
Q_ASSERT(packetList->getType() == PacketType::MessagesData);
qDebug() << "MessagesMixer::handleMessages()... senderNode:" << senderNode->getUUID();
QByteArray packetData = packetList->getMessage();
QBuffer packet{ &packetData };
packet.open(QIODevice::ReadOnly);
@ -109,14 +73,6 @@ void MessagesMixer::handleMessages(QSharedPointer<NLPacketList> packetList, Shar
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(
[&](const SharedNodePointer& node)->bool {
@ -125,8 +81,6 @@ void MessagesMixer::handleMessages(QSharedPointer<NLPacketList> packetList, Shar
},
[&](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 channelUtf8 = channel.toUtf8();
@ -163,47 +117,37 @@ void MessagesMixer::handleMessagesUnsubscribe(QSharedPointer<NLPacketList> packe
// FIXME - make these stats relevant
void MessagesMixer::sendStatsPacket() {
QJsonObject statsObject;
statsObject["average_listeners_last_second"] = (float) _sumListeners / (float) _numStatFrames;
statsObject["trailing_sleep_percentage"] = _trailingSleepRatio * 100;
statsObject["performance_throttling_ratio"] = _performanceThrottlingRatio;
QJsonObject messagesObject;
auto nodeList = DependencyManager::get<NodeList>();
// add stats for each listerner
nodeList->eachNode([&](const SharedNodePointer& node) {
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
messagesStats[USERNAME_UUID_REPLACEMENT_STATS_KEY] = uuidStringWithoutCurlyBraces(node->getUUID());
messagesStats[NODE_OUTBOUND_KBPS_STAT_KEY] = node->getOutboundBandwidth();
messagesStats[NODE_INBOUND_KBPS_STAT_KEY] = node->getInboundBandwidth();
messagesStats["outbound_kbps"] = node->getOutboundBandwidth();
messagesStats["inbound_kbps"] = node->getInboundBandwidth();
messagesObject[uuidStringWithoutCurlyBraces(node->getUUID())] = messagesStats;
});
statsObject["messages"] = messagesObject;
ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject);
_sumListeners = 0;
_numStatFrames = 0;
}
void MessagesMixer::run() {
ThreadedAssignment::commonInit(MESSAGES_MIXER_LOGGING_NAME, NodeType::MessagesMixer);
NodeType_t owningNodeType = DependencyManager::get<NodeList>()->getOwnerType();
qDebug() << "owningNodeType:" << owningNodeType;
auto nodeList = DependencyManager::get<NodeList>();
nodeList->addNodeTypeToInterestSet(NodeType::Agent);
/*
nodeList->linkedDataCreateCallback = [] (Node* node) {
// no need to link data
};
*/
// wait until we have the domain-server settings, otherwise we bail
DomainHandler& domainHandler = nodeList->getDomainHandler();
@ -228,13 +172,6 @@ void MessagesMixer::run() {
}
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...
//
// 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";
// }
const QString MESSAGES_MIXER_SETTINGS_KEY = "messages_mixer";
}

View file

@ -37,18 +37,7 @@ private slots:
private:
void parseDomainServerSettings(const QJsonObject& domainSettings);
QHash<QString,QSet<QUuid>> _channelSubscribers;
quint64 _lastFrameTimestamp;
float _trailingSleepRatio;
float _performanceThrottlingRatio;
int _sumListeners;
int _numStatFrames;
int _sumBillboardPackets;
int _sumIdentityPackets;
};
#endif // hifi_MessagesMixer_h

View file

@ -556,10 +556,10 @@
"assignment-types": [4],
"settings": [
{
"name": "max_node_send_bandwidth",
"name": "unused",
"type": "double",
"label": "Per-Node Bandwidth",
"help": "Desired maximum send bandwidth (in Megabits per second) to each node",
"label": "Unused setting",
"help": "an asofyet unused setting",
"placeholder": 1.0,
"default": 1.0,
"advanced": true

View file

@ -132,7 +132,6 @@ void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList
}
QVariant DomainServerSettingsManager::valueOrDefaultValueForKeyPath(const QString& keyPath) {
qDebug() << "DomainServerSettingsManager::valueOrDefaultValueForKeyPath() keyPath:" << keyPath;
const QVariant* foundValue = valueForKeyPath(_configMap.getMergedConfig(), keyPath);
if (foundValue) {
@ -227,8 +226,6 @@ bool DomainServerSettingsManager::handleAuthenticatedHTTPRequest(HTTPConnection
}
QJsonObject DomainServerSettingsManager::responseObjectForType(const QString& typeValue, bool isAuthenticated) {
qDebug() << "DomainServerSettingsManager::responseObjectForType() typeValue:" << typeValue;
QJsonObject responseObject;
if (!typeValue.isEmpty() || isAuthenticated) {

View file

@ -137,5 +137,5 @@ void MessagesClient::handleNodeKilled(SharedNodePointer node) {
if (node->getType() != NodeType::MessagesMixer) {
return;
}
// FIXME - do we need to do any special bookkeeping for when the messages mixer is no longer available
}