Merge branch 'master' of github.com:highfidelity/hifi into serverless-domains

This commit is contained in:
Seth Alves 2018-03-19 14:59:18 -07:00
commit f61504b814
4 changed files with 154 additions and 4 deletions

View file

@ -20,6 +20,7 @@ Overlay {
font.family: "Helvetica"
font.pixelSize: 18
lineHeight: 18
clip: true
}
}

View file

@ -40,8 +40,10 @@ QUrl const TextOverlay::URL(QString("hifi/overlays/TextOverlay.qml"));
*
* @property {number} margin=0 - Sets the <code>leftMargin</code> and <code>topMargin</code> values, in pixels.
* <em>Write-only.</em>
* @property {number} leftMargin=0 - The left margin's size, in pixels. <em>Write-only.</em>
* @property {number} topMargin=0 - The top margin's size, in pixels. <em>Write-only.</em>
* @property {number} leftMargin=0 - The left margin's size, in pixels. This value is also used for the right margin.
* <em>Write-only.</em>
* @property {number} topMargin=0 - The top margin's size, in pixels. This value is also used for the bottom margin.
* <em>Write-only.</em>
* @property {string} text="" - The text to display. Text does not automatically wrap; use <code>\n</code> for a line break. Text
* is clipped to the <code>bounds</code>. <em>Write-only.</em>
* @property {number} font.size=18 - The size of the text, in pixels. <em>Write-only.</em>

View file

@ -23,6 +23,21 @@
#include "Node.h"
#include "ReceivedMessage.h"
/**jsdoc
* <p>The Messages API enables text and data to be sent between scripts over named "channels". A channel can have an arbitrary
* name to help separate messaging between different sets of scripts.</p>
*
* <p><strong>Note:</strong> If you want to call a function in another script, you should use one of the following rather than
* sending a message:</p>
* <ul>
* <li>{@link Entities.callEntityClientMethod}</li>
* <li>{@link Entities.callEntityMethod}</li>
* <li>{@link Entities.callEntityServerMethod}</li>
* <li>{@link Script.callEntityScriptMethod}</li>
* </ul>
*
* @namespace Messages
*/
class MessagesClient : public QObject, public Dependency {
Q_OBJECT
public:
@ -30,10 +45,115 @@ public:
void startThread();
/**jsdoc
* Send a text message on a channel.
* @function Messages.sendMessage
* @param {string} channel - The channel to send the message on.
* @param {string} message - The message to send.
* @param {boolean} [localOnly=false] - If <code>false</code> then the message is sent to all Interface, client entity,
* server entity, and assignment client scripts in the domain.<br />
* If <code>true</code> then: if sent from an Interface or client entity script it is received by all Interface and
* client entity scripts; if sent from a server entity script it is received by all entity server scripts; and if sent
* from an assignment client script it is received only by that same assignment client script.
* @example <caption>Send and receive a message.</caption>
* // Receiving script.
* var channelName = "com.highfidelity.example.messages-example";
*
* function onMessageReceived(channel, message, sender, localOnly) {
* print("Message received:");
* print("- channel: " + channel);
* print("- message: " + message);
* print("- sender: " + sender);
* print("- localOnly: " + localOnly);
* }
*
* Messages.subscribe(channelName);
* Messages.messageReceived.connect(onMessageReceived);
*
* Script.scriptEnding.connect(function () {
* Messages.messageReceived.disconnect(onMessageReceived);
* Messages.unsubscribe(channelName);
* });
*
*
* // Sending script.
* var channelName = "com.highfidelity.example.messages-example";
* var message = "Hello";
* Messages.sendMessage(channelName, message);
*/
Q_INVOKABLE void sendMessage(QString channel, QString message, bool localOnly = false);
/**jsdoc
* Send a text message locally on a channel.
* This is the same as calling {@link Messages.sendMessage|sendMessage} with <code>localOnly</code> set to
* <code>true</code>.
* @function Messages.sendLocalMessage
* @param {string} channel - The channel to send the message on.
* @param {string} message - The message to send.
*/
Q_INVOKABLE void sendLocalMessage(QString channel, QString message);
/**jsdoc
* Send a data message on a channel.
* @function Messages.sendData
* @param {string} channel - The channel to send the data on.
* @param {object} data - The data to send. The data is handled as a byte stream, for example as may be provided via a
* JavaScript <code>Int8Array</code> object.
* @param {boolean} [localOnly=false] - If <code>false</code> then the message is sent to all Interface, client entity,
* server entity, and assignment client scripts in the domain.<br />
* If <code>true</code> then: if sent from an Interface or client entity script it is received by all Interface and
* client entity scripts; if sent from a server entity script it is received by all entity server scripts; and if sent
* from an assignment client script it is received only by that same assignment client script.
* @example <caption>Send and receive data.</caption>
* // Receiving script.
* var channelName = "com.highfidelity.example.messages-example";
*
* function onDataReceived(channel, data, sender, localOnly) {
* var int8data = new Int8Array(data);
* var dataAsString = "";
* for (var i = 0; i < int8data.length; i++) {
* if (i > 0) {
* dataAsString += ", ";
* }
* dataAsString += int8data[i];
* }
* print("Data received:");
* print("- channel: " + channel);
* print("- data: " + dataAsString);
* print("- sender: " + sender);
* print("- localOnly: " + localOnly);
* }
*
* Messages.subscribe(channelName);
* Messages.dataReceived.connect(onDataReceived);
*
* Script.scriptEnding.connect(function () {
* Messages.dataReceived.disconnect(onDataReceived);
* Messages.unsubscribe(channelName);
* });
*
*
* // Sending script.
* var channelName = "com.highfidelity.example.messages-example";
* var int8data = new Int8Array([1, 1, 2, 3, 5, 8, 13]);
* Messages.sendData(channelName, int8data.buffer);
*/
Q_INVOKABLE void sendData(QString channel, QByteArray data, bool localOnly = false);
/**jsdoc
* Subscribe the scripting environment &mdash; Interface, the entity script server, or assignment client instance &mdash;
* to receive messages on a specific channel. Note that, for example, if there are two Interface scripts that subscribe to
* different channels, both scripts will receive messages on both channels.
* @function Messages.subscribe
* @param {string} channel - The channel to subscribe to.
*/
Q_INVOKABLE void subscribe(QString channel);
/**jsdoc
* Unsubscribe the scripting environment from receiving messages on a specific channel.
* @function Messages.unsubscribe
* @param {string} channel - The channel to unsubscribe from.
*/
Q_INVOKABLE void unsubscribe(QString channel);
static void decodeMessagesPacket(QSharedPointer<ReceivedMessage> receivedMessage, QString& channel,
@ -43,7 +163,34 @@ public:
static std::unique_ptr<NLPacketList> encodeMessagesDataPacket(QString channel, QByteArray data, QUuid senderID);
signals:
/**jsdoc
* Triggered when the a text message is received.
* @function Messages.messageReceived
* @param {string} channel - The channel that the message was sent on. You can use this to filter out messages not relevant
* to your script.
* @param {string} message - The message received.
* @param {Uuid} senderID - The UUID of the sender: the user's session UUID if sent by an Interface or client entity
* script, the UUID of the entity script server if sent by a server entity script, or the UUID of the assignment client
* instance if sent by an assignment client script.
* @param {boolean} localOnly - <code>true</code> if the message was sent with <code>localOnly = true</code>.
* @returns {Signal}
*/
void messageReceived(QString channel, QString message, QUuid senderUUID, bool localOnly);
/**jsdoc
* Triggered when a data message is received.
* @function Messages.dataReceived
* @param {string} channel - The channel that the message was sent on. You can use this to filter out messages not relevant
* to your script.
* @param {object} data - The data received. The data is handled as a byte stream, for example as may be used by a
* JavaScript <code>Int8Array</code> object.
* @param {Uuid} senderID - The UUID of the sender: the user's session UUID if sent by an Interface or client entity
* script, the UUID of the entity script server if sent by a server entity script, or the UUID of the assignment client
* script, the UUID of the entity script server if sent by a server entity script, or the UUID of the assignment client
* instance if sent by an assignment client script.
* @param {boolean} localOnly - <code>true</code> if the message was sent with <code>localOnly = true</code>.
* @returns {Signal}
*/
void dataReceived(QString channel, QByteArray data, QUuid senderUUID, bool localOnly);
private slots:

View file

@ -5,7 +5,7 @@ Messages.subscribe(channelName);
//messageReceived(QString channel, QString message, QUuid senderUUID, bool localOnly);
Messages.messageReceived.connect(function(channel, message, sender, local) {
print("message recieved on ", channel, " message:", message, " from:", sender, " local:", local);
print("message received on ", channel, " message:", message, " from:", sender, " local:", local);
});
Messages.dataReceived.connect(function(channel, data, sender, local) {
@ -17,7 +17,7 @@ Messages.dataReceived.connect(function(channel, data, sender, local) {
}
dataAsString += int8data[i];
}
print("data recieved on ", channel, " from:", sender, " local:", local, "length of data:", int8data.length, " data:", dataAsString);
print("data received on ", channel, " from:", sender, " local:", local, "length of data:", int8data.length, " data:", dataAsString);
});
var counter = 0;