History

CR

Atlante45 committed 9 years ago

Commit 3a30de71 parent 72ed1ad6 files · +9 −20Browse files

Showing the changes to libraries/entities/src/EntityScriptServerLogClient.cpp (1 of 6 files). Show all

Unified · Split

libraries/entities/src/EntityScriptServerLogClient.cpp+85−0
@@ -0,0 +1,85 @@
1//
2// EntityScriptServerLogClient.cpp
3// interface/src
4//
5// Created by Clement Brisset on 2/1/17.
6// Copyright 2017 High Fidelity, Inc.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#include "EntityScriptServerLogClient.h"
13
14EntityScriptServerLogClient::EntityScriptServerLogClient() {
15 auto nodeList = DependencyManager::get<NodeList>();
16 auto& packetReceiver = nodeList->getPacketReceiver();
17 packetReceiver.registerListener(PacketType::EntityServerScriptLog, this, "handleEntityServerScriptLogPacket");
18
19 QObject::connect(nodeList.data(), &NodeList::nodeActivated, this, &EntityScriptServerLogClient::nodeActivated);
20 QObject::connect(nodeList.data(), &NodeList::nodeKilled, this, &EntityScriptServerLogClient::nodeKilled);
21
22 QObject::connect(nodeList.data(), &NodeList::canRezChanged, this, &EntityScriptServerLogClient::canRezChanged);
23}
24
25void EntityScriptServerLogClient::connectNotify(const QMetaMethod& signal) {
26 // This needs to be delayed or "receivers()" will return completely inconsistent values
27 QMetaObject::invokeMethod(this, "connectionsChanged", Qt::QueuedConnection);
28}
29
30void EntityScriptServerLogClient::disconnectNotify(const QMetaMethod& signal) {
31 // This needs to be delayed or "receivers()" will return completely inconsistent values
32 QMetaObject::invokeMethod(this, "connectionsChanged", Qt::QueuedConnection);
33}
34
35void EntityScriptServerLogClient::connectionsChanged() {
36 auto numReceivers = receivers(SIGNAL(receivedNewLogLines(QString)));
37 if (!_subscribed && numReceivers > 0) {
38 enableToEntityServerScriptLog(DependencyManager::get<NodeList>()->getThisNodeCanRez());
39 } else if (_subscribed && numReceivers == 0) {
40 enableToEntityServerScriptLog(false);
41 }
42}
43
44void EntityScriptServerLogClient::enableToEntityServerScriptLog(bool enable) {
45 auto nodeList = DependencyManager::get<NodeList>();
46
47 if (auto node = nodeList->soloNodeOfType(NodeType::EntityScriptServer)) {
48 auto packet = NLPacket::create(PacketType::EntityServerScriptLog, sizeof(bool), true);
49 packet->writePrimitive(enable);
50 nodeList->sendPacket(std::move(packet), *node);
51
52 if (_subscribed != enable) {
53 if (enable) {
54 emit receivedNewLogLines("====================== Subscribded to the Entity Script Server's log ======================");
55 } else {
56 emit receivedNewLogLines("==================== Unsubscribded from the Entity Script Server's log ====================");
57 }
58 }
59 _subscribed = enable;
60 }
61}
62
63void EntityScriptServerLogClient::handleEntityServerScriptLogPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode) {
64 emit receivedNewLogLines(QString::fromUtf8(message->readAll()));
65}
66
67void EntityScriptServerLogClient::nodeActivated(SharedNodePointer activatedNode) {
68 if (_subscribed && activatedNode->getType() == NodeType::EntityScriptServer) {
69 _subscribed = false;
70 enableToEntityServerScriptLog(DependencyManager::get<NodeList>()->getThisNodeCanRez());
71 }
72}
73
74void EntityScriptServerLogClient::nodeKilled(SharedNodePointer killedNode) {
75 if (killedNode->getType() == NodeType::EntityScriptServer) {
76 emit receivedNewLogLines("====================== Connection to the Entity Script Server lost ======================");
77 }
78}
79
80void EntityScriptServerLogClient::canRezChanged(bool canRez) {
81 auto numReceivers = receivers(SIGNAL(receivedNewLogLines(QString)));
82 if (numReceivers > 0) {
83 enableToEntityServerScriptLog(canRez);
84 }
85}