mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 16:58:09 +02:00
handle subscribe when messages mixer is not available
This commit is contained in:
parent
6dfcc53c27
commit
85aa3b3f83
4 changed files with 33 additions and 48 deletions
|
@ -12,29 +12,25 @@ Script.update.connect(function (deltaTime) {
|
||||||
subscribedForTime += deltaTime;
|
subscribedForTime += deltaTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (totalTime > 5) {
|
// if we've been unsubscribed for SWITCH_SUBSCRIPTION_TIME seconds, subscribe
|
||||||
|
if (!subscribed && unsubscribedForTime > SWITCH_SUBSCRIPTION_TIME) {
|
||||||
// if we've been unsubscribed for SWITCH_SUBSCRIPTION_TIME seconds, subscribe
|
print("---- subscribing ----");
|
||||||
if (!subscribed && unsubscribedForTime > SWITCH_SUBSCRIPTION_TIME) {
|
Messages.subscribe(channel);
|
||||||
print("---- subscribing ----");
|
subscribed = true;
|
||||||
Messages.subscribe(channel);
|
subscribedForTime = 0;
|
||||||
subscribed = true;
|
|
||||||
subscribedForTime = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we've been subscribed for SWITCH_SUBSCRIPTION_TIME seconds, unsubscribe
|
|
||||||
if (subscribed && subscribedForTime > SWITCH_SUBSCRIPTION_TIME) {
|
|
||||||
print("---- unsubscribing ----");
|
|
||||||
Messages.unsubscribe(channel);
|
|
||||||
subscribed = false;
|
|
||||||
unsubscribedForTime = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Even if not subscribed, still publish
|
|
||||||
var message = "update() deltaTime:" + deltaTime;
|
|
||||||
//print(message);
|
|
||||||
Messages.sendMessage(channel, message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if we've been subscribed for SWITCH_SUBSCRIPTION_TIME seconds, unsubscribe
|
||||||
|
if (subscribed && subscribedForTime > SWITCH_SUBSCRIPTION_TIME) {
|
||||||
|
print("---- unsubscribing ----");
|
||||||
|
Messages.unsubscribe(channel);
|
||||||
|
subscribed = false;
|
||||||
|
unsubscribedForTime = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Even if not subscribed, still publish
|
||||||
|
var message = "update() deltaTime:" + deltaTime;
|
||||||
|
Messages.sendMessage(channel, message);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,7 @@
|
||||||
var totalTime = 0;
|
print("---- subscribing ----");
|
||||||
var subscribed = false;
|
Messages.subscribe(channel);
|
||||||
var WAIT_FOR_SUBSCRIPTION_TIME = 10;
|
|
||||||
function myUpdate(deltaTime) {
|
|
||||||
var channel = "example";
|
|
||||||
totalTime += deltaTime;
|
|
||||||
|
|
||||||
if (totalTime > WAIT_FOR_SUBSCRIPTION_TIME && !subscribed) {
|
|
||||||
|
|
||||||
print("---- subscribing ----");
|
|
||||||
Messages.subscribe(channel);
|
|
||||||
subscribed = true;
|
|
||||||
Script.update.disconnect(myUpdate);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Script.update.connect(myUpdate);
|
|
||||||
|
|
||||||
Messages.messageReceived.connect(function (channel, message, senderID) {
|
Messages.messageReceived.connect(function (channel, message, senderID) {
|
||||||
print("message received on channel:" + channel + ", message:" + message + ", senderID:" + senderID);
|
print("message received on channel:" + channel + ", message:" + message + ", senderID:" + senderID);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ MessagesClient::MessagesClient() {
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
auto& packetReceiver = nodeList->getPacketReceiver();
|
auto& packetReceiver = nodeList->getPacketReceiver();
|
||||||
packetReceiver.registerMessageListener(PacketType::MessagesData, this, "handleMessagesPacket");
|
packetReceiver.registerMessageListener(PacketType::MessagesData, this, "handleMessagesPacket");
|
||||||
connect(nodeList.data(), &LimitedNodeList::nodeKilled, this, &MessagesClient::handleNodeKilled);
|
connect(nodeList.data(), &LimitedNodeList::nodeAdded, this, &MessagesClient::handleNodeAdded);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesClient::init() {
|
void MessagesClient::init() {
|
||||||
|
@ -75,10 +75,8 @@ void MessagesClient::sendMessage(const QString& channel, const QString& message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME - we should keep track of the channels we are subscribed to locally, and
|
|
||||||
// in the event that they mixer goes away and/or comes back we should automatically
|
|
||||||
// resubscribe to those channels
|
|
||||||
void MessagesClient::subscribe(const QString& channel) {
|
void MessagesClient::subscribe(const QString& channel) {
|
||||||
|
_subscribedChannels << channel;
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
SharedNodePointer messagesMixer = nodeList->soloNodeOfType(NodeType::MessagesMixer);
|
SharedNodePointer messagesMixer = nodeList->soloNodeOfType(NodeType::MessagesMixer);
|
||||||
|
|
||||||
|
@ -90,6 +88,7 @@ void MessagesClient::subscribe(const QString& channel) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesClient::unsubscribe(const QString& channel) {
|
void MessagesClient::unsubscribe(const QString& channel) {
|
||||||
|
_subscribedChannels.remove(channel);
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
SharedNodePointer messagesMixer = nodeList->soloNodeOfType(NodeType::MessagesMixer);
|
SharedNodePointer messagesMixer = nodeList->soloNodeOfType(NodeType::MessagesMixer);
|
||||||
|
|
||||||
|
@ -100,9 +99,10 @@ void MessagesClient::unsubscribe(const QString& channel) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessagesClient::handleNodeKilled(SharedNodePointer node) {
|
void MessagesClient::handleNodeAdded(SharedNodePointer node) {
|
||||||
if (node->getType() != NodeType::MessagesMixer) {
|
if (node->getType() == NodeType::MessagesMixer) {
|
||||||
return;
|
for (const auto& channel : _subscribedChannels) {
|
||||||
|
subscribe(channel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// FIXME - do we need to do any special bookkeeping for when the messages mixer is no longer available
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,10 @@ signals:
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void handleMessagesPacket(QSharedPointer<NLPacketList> packetList, SharedNodePointer senderNode);
|
void handleMessagesPacket(QSharedPointer<NLPacketList> packetList, SharedNodePointer senderNode);
|
||||||
void handleNodeKilled(SharedNodePointer node);
|
void handleNodeAdded(SharedNodePointer node);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
QSet<QString> _subscribedChannels;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue