It would be really useful if it was possible to use Websockets for communicating with the 'outside world'.
That way WeBuilder could send/receive data between editor and i.e. nodejs scripts, without having to setup hidden Webkit frames.
Moderator: kfury77
//create a new WebSocket object.
var websocket = new WebSocket("ws://localhost:7913");
// Events/Signals
websocket.onopen = function(evt) { /* do stuff */ }; //on open event
websocket.onclose = function(evt) { /* do stuff */ }; //on close event
websocket.onmessage = function(evt) { /* do stuff */ }; //on message event
websocket.onerror = function(evt) { /* do stuff */ }; //on error event
// Methods
websocket.send(message); //send method
websocket.close(); //close method
var js_executer_websockets = null;
var script_loaded = false;
var test_counter = 0;
//this is just for debugging, otherwise not required
function OnWebkitConsoleMessage(Sender, browser, message, source, line, Res) {
alert(_t(line) + ":" + source + ":" + message);
}
function WebsocketsCallback(res, err) {
var json = new TScriptableJSON();
json.Parse(res);
var cmd = json.GetValue("cmd");
var message = "";
if ((cmd == "message") || (cmd == "error")) {
message = json.GetValue("message");
}
Script.Message("Websockets event: " + cmd + ": " + message);
delete json;
}
function TestJSExecuterWebsockets(Sender) {
if (scriptexec == null) {
scriptexec = Script.CreateScriptableJsExecuter("");
scriptexec.OnConsoleMessage = &OnWebkitConsoleMessage; //just for debugging
}
var script_file = Script.Path + "websockets.js";
if (!script_loaded) {
scriptexec.ExecuteJavaScriptFileRequest(script_file, "", "", &WebsocketsCallback) //load script
script_loaded = true;
}
//sending will probably fail on the 1st call because websockets won't be conected yet; it's asynchronous and takes time
//the script could be improved by moving the 1st sending attempt to WebsocketsCallback on receiving "open"
scriptexec.ExecuteJavaScriptFileRequest("", "", "Test Message To Send " + _T(test_counter), &WebsocketsCallback)
test_counter = test_counter + 1;
}
Script.RegisterAction("Test", "Test Websockets", "", &TestJSExecuterWebsockets);
var channel;
//create a new WebSocket object.
//we do it only once when script is loaded for this test script
var websocket = new WebSocket("ws://echo.websocket.org");
// Events
websocket.onopen = function(evt) {
var params = {
'cmd': 'open'
};
WeBuilderData.SendNative(channel, JSON.stringify(params), '');
};
websocket.onclose = function(evt) {
var params = {
'cmd': 'close'
};
WeBuilderData.SendNative(channel, JSON.stringify(params), '');
};
websocket.onmessage = function(evt) {
var params = {
'cmd': 'message',
'message': evt.data
};
WeBuilderData.SendNative(channel, JSON.stringify(params), '');
};
websocket.onerror = function(evt) {
var params = {
'cmd': 'error',
'message': evt.data
};
WeBuilderData.SendNative(channel, JSON.stringify(params), '');
};
WeBuilder_OnData = function(param_channel, param_message) {
channel = param_channel;
if (param_message != "") {
websocket.send(param_message); //send method
}
}
Return to HTMLPad / Rapid CSS / Rapid PHP / WeBuilder Feature Requests
Users browsing this forum: No registered users and 22 guests