mirror of
https://github.com/rstudio/shiny.git
synced 2026-04-07 03:00:20 -04:00
added binary messages, yes, ws can do dat!
This commit is contained in:
@@ -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
@@ -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
11
inst/www/shared/shiny.min.js
vendored
11
inst/www/shared/shiny.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user