added binary messages, yes, ws can do dat!

This commit is contained in:
david.zotloeterer
2015-11-16 19:26:24 +01:00
parent b5e49a6619
commit a27efbd937
7 changed files with 62 additions and 20 deletions

View File

@@ -682,6 +682,9 @@ ShinySession <- R6Class(
private$sendResponse(msg, value)
}
},
sendBinaryMessage = function(rawVect) {
private$write(rawVect)
},
sendCustomMessage = function(type, message) {
data <- list()
data[[type]] <- message

File diff suppressed because one or more lines are too long

View File

@@ -935,6 +935,7 @@ var ShinyApp = function() {
// in msgObj.custom.foo and msgObj.custom.bar.
var customMessageHandlerOrder = [];
var customMessageHandlers = {};
var customBinaryMessageHandlers = [];
// Adds Shiny (internal) message handler
function addMessageHandler(type, handler) {
@@ -947,13 +948,16 @@ var ShinyApp = function() {
if (handler.length !== 1) {
throw('handler must be a function that takes one argument.');
}
messageHandlerOrder.push(type);
messageHandlers[type] = handler;
}
// Adds custom message handler - this one is exposed to the user
function addCustomMessageHandler(type, handler) {
if(type=='binary') {
customBinaryMessageHandlers.push(handler);
return;
}
if (customMessageHandlers[type]) {
throw('handler for message of type "' + type + '" already added.');
}
@@ -970,20 +974,34 @@ var ShinyApp = function() {
exports.addCustomMessageHandler = addCustomMessageHandler;
this.dispatchMessage = function(msg) {
var msgObj = JSON.parse(msg);
this.dispatchMessage = function(data) {
var msgObj = {};
if(typeof data === "string") {
msgObj = JSON.parse(data);
} else {
msgObj = {buffer: data};
}
var evt = jQuery.Event('shiny:message');
evt.message = msgObj;
$(document).trigger(evt);
if (evt.isDefaultPrevented()) return;
// Send msgObj.foo and msgObj.bar to appropriate handlers
this._sendMessagesToHandlers(evt.message, messageHandlers, messageHandlerOrder);
if(typeof data === "string") {
// Send msgObj.foo and msgObj.bar to appropriate handlers
this._sendMessagesToHandlers(evt.message, messageHandlers, messageHandlerOrder);
} else {
this._sendMessagesToBinaryHandlers(evt.message, customBinaryMessageHandlers);
}
this.$updateConditionals();
};
this._sendMessagesToBinaryHandlers = function(msgObj, handlers) {
for (var i = 0; i < handlers.length; i++)
if(handlers[i].call(this, msgObj.buffer))
break;
};
// A function for sending messages to the appropriate handlers.
// - msgObj: the object containing messages, with format {msgObj.foo, msObj.bar

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -343,6 +343,7 @@ var ShinyApp = function() {
// in msgObj.custom.foo and msgObj.custom.bar.
var customMessageHandlerOrder = [];
var customMessageHandlers = {};
var customBinaryMessageHandlers = [];
// Adds Shiny (internal) message handler
function addMessageHandler(type, handler) {
@@ -355,13 +356,16 @@ var ShinyApp = function() {
if (handler.length !== 1) {
throw('handler must be a function that takes one argument.');
}
messageHandlerOrder.push(type);
messageHandlers[type] = handler;
}
// Adds custom message handler - this one is exposed to the user
function addCustomMessageHandler(type, handler) {
if(type=='binary') {
customBinaryMessageHandlers.push(handler);
return;
}
if (customMessageHandlers[type]) {
throw('handler for message of type "' + type + '" already added.');
}
@@ -378,20 +382,34 @@ var ShinyApp = function() {
exports.addCustomMessageHandler = addCustomMessageHandler;
this.dispatchMessage = function(msg) {
var msgObj = JSON.parse(msg);
this.dispatchMessage = function(data) {
var msgObj = {};
if(typeof data === "string") {
msgObj = JSON.parse(data);
} else {
msgObj = {buffer: data};
}
var evt = jQuery.Event('shiny:message');
evt.message = msgObj;
$(document).trigger(evt);
if (evt.isDefaultPrevented()) return;
// Send msgObj.foo and msgObj.bar to appropriate handlers
this._sendMessagesToHandlers(evt.message, messageHandlers, messageHandlerOrder);
if(typeof data === "string") {
// Send msgObj.foo and msgObj.bar to appropriate handlers
this._sendMessagesToHandlers(evt.message, messageHandlers, messageHandlerOrder);
} else {
this._sendMessagesToBinaryHandlers(evt.message, customBinaryMessageHandlers);
}
this.$updateConditionals();
};
this._sendMessagesToBinaryHandlers = function(msgObj, handlers) {
for (var i = 0; i < handlers.length; i++)
if(handlers[i].call(this, msgObj.buffer))
break;
};
// A function for sending messages to the appropriate handlers.
// - msgObj: the object containing messages, with format {msgObj.foo, msObj.bar