APEX, Node.js and HTML5: Magic! fileTim Berners-Lee 1990 1995 HTML 2.0

Preview:

Citation preview

APEX, Node.js and HTML5: Magic!

Alan ArentsenAlex Nuijten

alanarentsen.blogspot.com

@alanarentsen

nuijten.blogspot.com

@alexnuijten

Tim Berners-Lee

1990 1995HTML 2.0

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">

1997HTML 3.2

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">

1997HTML 4.0

1999HTML 4.0.1

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN” "http://www.w3.org/TR/html4/strict.dtd">

2000XHTML 1.0

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

2001XHTML 1.1

2008HTML 5

Working Draft

2009XHTML 2.0✝

2012HTML 5

Candidate Recommendation

<!DOCTYPE html>

2014HTML 5

Recommendation

28 October

2015HTML 5.1

Candidate Recommendation

Input Types Graphics

VideoAudio

Geolocation

DragDropLocal Storage

Web WorkersWeb Sockets

Web Sockets

bi-directional, full-duplex communication.

Draft status

APEX, Node.js and HTML5: Magic!

Alan ArentsenAlex Nuijten

Websockets

Poll vs. Push

Background Process

NoAre you done yet?

No

Are you done yet?

No

Are you done yet?

NoAre you done yet?No

Are you done yet?

NoAre you done yet?

Background Process

I am Done!

Physical

Data

Application

Presentation

Session

Transport

Network

HTTP

Websockets

My First Websocket

http://www.websocket.org/echo.html

$(function() { window.WebSocket = window.WebSocket || window.MozWebSocket; if (!window.WebSocket) { console.log ('There is no websocket API available.'); } else { ws_connection = new WebSocket ('wss://echo.websocket.org'); ws_connection.onmessage = function(message){ console.log ('Echo: ' + message.data); alert (message.data); } } });

var ws_connection;

$(function() { window.WebSocket = window.WebSocket || window.MozWebSocket; if (!window.WebSocket) { console.log ('There is no websocket API available.'); } else { ws_connection = new WebSocket ('wss://echo.websocket.org'); ws_connection.onmessage = function(message){ console.log ('Echo: ' + message.data); alert (message.data); } } });

var ws_connection;

$(function() { window.WebSocket = window.WebSocket || window.MozWebSocket; if (!window.WebSocket) { console.log ('There is no websocket API available.'); } else { ws_connection = new WebSocket ('wss://echo.websocket.org'); ws_connection.onmessage = function(message){ console.log ('Echo: ' + message.data); alert (message.data); } } });

var ws_connection;

$(function() { window.WebSocket = window.WebSocket || window.MozWebSocket; if (!window.WebSocket) { console.log ('There is no websocket API available.'); } else { ws_connection = new WebSocket ('wss://echo.websocket.org'); ws_connection.onmessage = function(message){ console.log ('Echo: ' + message.data); alert (message.data); } } });

var ws_connection;

$(function() { window.WebSocket = window.WebSocket || window.MozWebSocket; if (!window.WebSocket) { console.log ('There is no websocket API available.'); } else { ws_connection = new WebSocket ('wss://echo.websocket.org'); ws_connection.onmessage = function(message){ console.log ('Echo: ' + message.data); alert (message.data); } } });

var ws_connection;

$(function() { window.WebSocket = window.WebSocket || window.MozWebSocket; if (!window.WebSocket) { console.log ('There is no websocket API available.'); } else { ws_connection = new WebSocket ('wss://echo.websocket.org'); ws_connection.onmessage = function(message){ console.log ('Echo: ' + message.data); alert (message.data); } } });

var ws_connection;

ws_connection.send (apex.item("P1_ECHO_TEXT").getValue());

$(function() { window.WebSocket = window.WebSocket || window.MozWebSocket; if (!window.WebSocket) { console.log ('There is no websocket API available.'); } else { ws_connection = new WebSocket ('wss://echo.websocket.org'); ws_connection.onmessage = function(message){ console.log ('Echo: ' + message.data); alert (message.data); } } });

var ws_connection;

Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for

data-intensive real-time applications that run across distributed devices.“ ”

Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect

for data-intensive real-time applications that run across distributed devices.

JSJavaScript on the Server

websockethttp

oraclerest

https

pythongrunt

filbert

soap-q

q-superagent

mongodb-q

underscoresocket.io

gulp

expressmocha

async

lodash

mongoose

hapi

commander

browserify

redis

jade

colorsmoment

coffee-scriptpassportconnect

nodemailer

q

bower

cheerio

chalk

sails

optimist

mysqluglify-js

jshint

nodemon

stylus

forever

mkdir

validator

debug

less

bluebird gm awesome

websockethttp

oraclerest

https

pythongrunt

filbert

soap-q

q-superagent

mongodb-q

underscoresocket.io

gulp

expressmocha

async

lodash

mongoose

hapi

commander

browserify

redis

jade

colorsmoment

coffee-scriptpassportconnect

nodemailer

q

bower

cheerio

chalk

sails

optimist

mysqluglify-js

jshint

nodemon

stylus

forever

mkdir

validator

debug

less

bluebird gm awesome

My First Node.js

"use strict";

process.title = 'Basic NodeJS Echo server';

var http = require('http'); var webSocketServer = require('websocket').server;

/* * HTTP server */ var server = http.createServer(function(req, resp){}); server.listen(4880, function() { console.log((new Date()) + " HTTP server is listening on port 4880"); });

/* * WebSocket server */ var wsServer = new webSocketServer({ httpServer: server });

"use strict";

process.title = 'Basic NodeJS Echo server';

var http = require('http'); var webSocketServer = require('websocket').server;

/* * HTTP server */ var server = http.createServer(function(req, resp){}); server.listen(4880, function() { console.log((new Date()) + " HTTP server is listening on port 4880"); });

/* * WebSocket server */ var wsServer = new webSocketServer({ httpServer: server });

Check Requirements

"use strict";

process.title = 'Basic NodeJS Echo server';

var http = require('http'); var webSocketServer = require('websocket').server;

/* * HTTP server */ var server = http.createServer(function(req, resp){}); server.listen(4880, function() { console.log((new Date()) + " HTTP server is listening on port 4880"); });

/* * WebSocket server */ var wsServer = new webSocketServer({ httpServer: server });

"use strict";

process.title = 'Basic NodeJS Echo server';

var http = require('http'); var webSocketServer = require('websocket').server;

/* * HTTP server */ var server = http.createServer(function(req, resp){}); server.listen(4880, function() { console.log((new Date()) + " HTTP server is listening on port 4880"); });

/* * WebSocket server */ var wsServer = new webSocketServer({ httpServer: server });

/* * Events on WebSocket server */ wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); console.log((new Date()) + ' Connection accepted from ' + request.origin);

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = message.utf8Data.toLowerCase(); connection.sendUTF(msgString); }); connection.on('close', function(connection) { console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); });

/* * Events on WebSocket server */ wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); console.log((new Date()) + ' Connection accepted from ' + request.origin);

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = message.utf8Data; connection.sendUTF(msgString); }); connection.on('close', function(connection) { console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); });

/* * Events on WebSocket server */ wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); console.log((new Date()) + ' Connection accepted from ' + request.origin);

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = message.utf8Data; connection.sendUTF(msgString); }); connection.on('close', function(connection) { console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); });

/* * Events on WebSocket server */ wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); console.log((new Date()) + ' Connection accepted from ' + request.origin);

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = message.utf8Data; connection.sendUTF(msgString); }); connection.on('close', function(connection) { console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); });

$(function() { window.WebSocket = window.WebSocket || window.MozWebSocket; if (!window.WebSocket) { console.log('There is no websocket API available.'); } else { ws_connection = new WebSocket ('ws://apex.ordina.nl:4880', 'echo-protocol'); ws_connection.onmessage = function(message){ alert (message.data); } } });

$(function() { window.WebSocket = window.WebSocket || window.MozWebSocket; if (!window.WebSocket) { console.log('There is no websocket API available.'); } else { ws_connection = new WebSocket ('ws://apex.ordina.nl:4880', 'echo-protocol'); ws_connection.onmessage = function(message){ alert (message.data); } } });

ws_connection.send (apex.item("P1_ECHO_TEXT").getValue());

Chat Application

Hi Everybody!

"use strict";

process.title = 'Broadcast NodeJS Chat server';

var http = require('http'); var webSocketServer = require('websocket').server;

/* * HTTP server */ var server = http.createServer(function(req, resp){}); server.listen(4880, function() { console.log((new Date()) + " HTTP server is listening on port 4880"); });

/* * WebSocket server */ var wsServer = new webSocketServer({ httpServer: server });

"use strict";

process.title = 'Broadcast NodeJS Chat server';

var http = require('http'); var webSocketServer = require('websocket').server;

/* * HTTP server */ var server = http.createServer(function(req, resp){}); server.listen(4880, function() { console.log((new Date()) + " HTTP server is listening on port 4880"); });

/* * WebSocket server */ var wsServer = new webSocketServer({ httpServer: server });

"use strict";

process.title = 'Broadcast NodeJS Chat server';

var http = require('http'); var webSocketServer = require('websocket').server;

/* * HTTP server */ var server = http.createServer(function(req, resp){}); server.listen(4880, function() { console.log((new Date()) + " HTTP server is listening on port 4880"); });

/* * WebSocket server */ var wsServer = new webSocketServer({ httpServer: server });

"use strict";

process.title = 'Broadcast NodeJS Chat server';

var http = require('http'); var webSocketServer = require('websocket').server;

/* * HTTP server */ var server = http.createServer(function(req, resp){}); server.listen(4880, function() { console.log((new Date()) + " HTTP server is listening on port 4880"); });

/* * WebSocket server */ var wsServer = new webSocketServer({ httpServer: server });

"use strict";

process.title = 'Broadcast NodeJS Chat server';

var http = require('http'); var webSocketServer = require('websocket').server;

/* * HTTP server */ var server = http.createServer(function(req, resp){}); server.listen(4880, function() { console.log((new Date()) + " HTTP server is listening on port 4880"); });

/* * WebSocket server */ var wsServer = new webSocketServer({ httpServer: server });

var clients = [ ]; wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); var index = clients.push(connection) - 1;

console.log((new Date()) + ' Connection accepted from ' + request.origin + '.');

var clients = [ ]; wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); var index = clients.push(connection) - 1;

console.log((new Date()) + ' Connection accepted from ' + request.origin + '.');

var clients = [ ]; wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); var index = clients.push(connection) - 1;

console.log((new Date()) + ' Connection accepted from ' + request.origin + '.');

var clients = [ ]; wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); var index = clients.push(connection) - 1;

console.log((new Date()) + ' Connection accepted from ' + request.origin + '.');

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = message.utf8Data; for(var i in clients){ clients[i].sendUTF(msgString); console.log((new Date()) + ' message sent to: ' + connection.remoteAddress + '.'); }; }); connection.on('close', function(connection) { clients.splice(index, 1); console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); });

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = message.utf8Data; for(var i in clients){ clients[i].sendUTF(msgString); console.log((new Date()) + ' message sent to: ' + connection.remoteAddress + '.'); }; }); connection.on('close', function(connection) { clients.splice(index, 1); console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); });

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = message.utf8Data; for(var i in clients){ clients[i].sendUTF(msgString); console.log((new Date()) + ' message sent to: ' + connection.remoteAddress + '.'); }; }); connection.on('close', function(connection) { clients.splice(index, 1); console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); });

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = message.utf8Data; for(var i in clients){ clients[i].sendUTF(msgString); console.log((new Date()) + ' message sent to: ' + connection.remoteAddress + '.'); }; }); connection.on('close', function(connection) { clients.splice(index, 1); console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); });

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = message.utf8Data; for(var i in clients){ clients[i].sendUTF(msgString); console.log((new Date()) + ' message sent to: ' + connection.remoteAddress + '.'); }; }); connection.on('close', function(connection) { clients.splice(index, 1); console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); });

Hi Everybody

Hi Everybody

Hi Everybody

Hi Everybody

Hi Everybody

Hi Everybody

Hello there!Hello there!

Send to

Message

Who is Connected?

Task

Payload

Chat MessageReport Connected Users

Complete MessageAll Connected Users

{task : 'the activity' ,payload : could be anything }

{task : 'chat_message' ,payload : {to_key : 'ACB123DSFJH123' ,msg : 'Hello There'} }

{task : 'connected_users' ,payload : [{'key' : 'ACB123DSFJH123' ,'username' : 'Arthur Dent'} ,{'key' : '4321CBAFGH4513' ,'username' : 'Ford Prefect'} ,{'key' : '56AFGHK90UH871' ,'username' : 'Marvin the Paranoid Android' } ] }}

key = apex.item('P4_CHATMATES').getValue(); message = apex.item('P4_TEXTMESSAGE').getValue(); jsonMsg = JSON.stringify( {task : 'chat_message' ,payload : {to_key : key ,msg : message} }); ws_connection.send (jsonMsg);

Send

key = apex.item('P4_CHATMATES').getValue(); message = apex.item('P4_TEXTMESSAGE').getValue(); jsonMsg = JSON.stringify( {task : 'chat_message' ,payload : {to_key : key ,msg : message} }); ws_connection.send (jsonMsg);

Send

key = apex.item('P4_CHATMATES').getValue(); message = apex.item('P4_TEXTMESSAGE').getValue(); jsonMsg = JSON.stringify( {task : 'chat_message' ,payload : {to_key : key ,msg : message} }); ws_connection.send (jsonMsg);

Send

key = apex.item('P4_CHATMATES').getValue(); message = apex.item('P4_TEXTMESSAGE').getValue(); jsonMsg = JSON.stringify( {task : 'chat_message' ,payload : {to_key : key ,msg : message} }); ws_connection.send (jsonMsg);

Send

key = apex.item('P4_CHATMATES').getValue(); message = apex.item('P4_TEXTMESSAGE').getValue(); jsonMsg = JSON.stringify( {task : 'chat_message' ,payload : {to_key : key ,msg : message} }); ws_connection.send (jsonMsg);

Send

ws_connection.onmessage = function(message) { var jsonMsg = JSON.parse(message.data); if (jsonMsg.task == 'user_broadcast') { var jsonResult = jsonMsg.payload;

$('#P4_CHATMATES').find('option').remove().end(); $.each(jsonResult, function() { $('#P4_CHATMATES').append( $("<option></option>") .text(this.username) .val(this.key) ); }); } else if (jsonMsg.task == 'chat_message') { apex.item('P4_CHATBOX').setValue(jsonMsg.payload.msg); } };

Receive

ws_connection.onmessage = function(message) { var jsonMsg = JSON.parse(message.data); if (jsonMsg.task == 'user_broadcast') { var jsonResult = jsonMsg.payload;

$('#P4_CHATMATES').find('option').remove().end(); $.each(jsonResult, function() { $('#P4_CHATMATES').append( $("<option></option>") .text(this.username) .val(this.key) ); }); } else if (jsonMsg.task == 'chat_message') { apex.item('P4_CHATBOX').setValue(jsonMsg.payload.msg); } };

Receive

ws_connection.onmessage = function(message) { var jsonMsg = JSON.parse(message.data); if (jsonMsg.task == 'user_broadcast') { var jsonResult = jsonMsg.payload;

$('#P4_CHATMATES').find('option').remove().end(); $.each(jsonResult, function() { $('#P4_CHATMATES').append( $("<option></option>") .text(this.username) .val(this.key) ); }); } else if (jsonMsg.task == 'chat_message') { apex.item('P4_CHATBOX').setValue(jsonMsg.payload.msg); } };

Receive

ws_connection.onmessage = function(message) { var jsonMsg = JSON.parse(message.data); if (jsonMsg.task == 'user_broadcast') { var jsonResult = jsonMsg.payload;

$('#P4_CHATMATES').find('option').remove().end(); $.each(jsonResult, function() { $('#P4_CHATMATES').append( $("<option></option>") .text(this.username) .val(this.key) ); }); } else if (jsonMsg.task == 'chat_message') { apex.item('P4_CHATBOX').setValue(jsonMsg.payload.msg); } };

Receive

ws_connection.onmessage = function(message) { var jsonMsg = JSON.parse(message.data); if (jsonMsg.task == 'user_broadcast') { var jsonResult = jsonMsg.payload;

$('#P4_CHATMATES').find('option').remove().end(); $.each(jsonResult, function() { $('#P4_CHATMATES').append( $("<option></option>") .text(this.username) .val(this.key) ); }); } else if (jsonMsg.task == 'chat_message') { apex.item('P4_CHATBOX').setValue(jsonMsg.payload.msg); } };

Receive

ws_connection.onmessage = function(message) { var jsonMsg = JSON.parse(message.data); if (jsonMsg.task == 'user_broadcast') { var jsonResult = jsonMsg.payload;

$('#P4_CHATMATES').find('option').remove().end(); $.each(jsonResult, function() { $('#P4_CHATMATES').append( $("<option></option>") .text(this.username) .val(this.key) ); }); } else if (jsonMsg.task == 'chat_message') { apex.item('P4_CHATBOX').setValue(jsonMsg.payload.msg); } };

Receive

"use strict";

process.title = 'One on One NodeJS Chat server';

var http = require('http'); var webSocketServer = require('websocket').server;

/* * HTTP server */ var server = http.createServer(function(req, resp){}); server.listen(4880, function() { console.log((new Date()) + " HTTP server is listening on port 4880"); });

/* * WebSocket server */ var wsServer = new webSocketServer({ httpServer: server });

"use strict";

process.title = 'One on One NodeJS Chat server';

var http = require('http'); var webSocketServer = require('websocket').server;

/* * HTTP server */ var server = http.createServer(function(req, resp){}); server.listen(4880, function() { console.log((new Date()) + " HTTP server is listening on port 4880"); });

/* * WebSocket server */ var wsServer = new webSocketServer({ httpServer: server });

var clients = [ ]; wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); connection.key = request.key; connection.username = request.resource.substring(1);

var index = clients.push(connection) - 1; console.log((new Date()) + ' Connection accepted from ' + request.origin + '.');

userBroadcast();

var clients = [ ]; wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); connection.key = request.key; connection.username = request.resource.substring(1);

var index = clients.push(connection) - 1; console.log((new Date()) + ' Connection accepted from ' + request.origin + '.');

userBroadcast();

var clients = [ ]; wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); connection.key = request.key; connection.username = request.resource.substring(1);

var index = clients.push(connection) - 1; console.log((new Date()) + ' Connection accepted from ' + request.origin + '.');

userBroadcast();

var clients = [ ]; wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); connection.key = request.key; connection.username = request.resource.substring(1);

var index = clients.push(connection) - 1; console.log((new Date()) + ' Connection accepted from ' + request.origin + '.');

userBroadcast();

var clients = [ ]; wsServer.on('request', function(request) { console.log((new Date()) + ' Websocketconnection from origin ' + request.origin + '.'); var connection = request.accept('echo-protocol', request.origin); connection.key = request.key; connection.username = request.resource.substring(1);

var index = clients.push(connection) - 1; console.log((new Date()) + ' Connection accepted from ' + request.origin + '.');

userBroadcast(); More on this function

in a little bit

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = JSON.parse(message.utf8Data); if (msgString.task == 'chat_message') { for(var i in clients){ if (clients[i].key == msgString.payload.to_key) { msgStringOut = JSON.stringify( {task :'chat_message' ,payload:{from_key:connection.key ,msg :msgString.payload.msg} });

clients[i].sendUTF(msgStringOut); console.log((new Date()) + ' message sent to: ' + connection.remoteAddress + '.'); }; }; }; });

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = JSON.parse(message.utf8Data); if (msgString.task == 'chat_message') { for(var i in clients){ if (clients[i].key == msgString.payload.to_key) { msgStringOut = JSON.stringify( {task :'chat_message' ,payload:{from_key:connection.key ,msg :msgString.payload.msg} });

clients[i].sendUTF(msgStringOut); console.log((new Date()) + ' message sent to: ' + connection.remoteAddress + '.'); }; }; }; });

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = JSON.parse(message.utf8Data); if (msgString.task == 'chat_message') { for(var i in clients){ if (clients[i].key == msgString.payload.to_key) { msgStringOut = JSON.stringify( {task :'chat_message' ,payload:{from_key:connection.key ,msg :msgString.payload.msg} });

clients[i].sendUTF(msgStringOut); console.log((new Date()) + ' message sent to: ' + connection.remoteAddress + '.'); }; }; }; });

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = JSON.parse(message.utf8Data); if (msgString.task == 'chat_message') { for(var i in clients){ if (clients[i].key == msgString.payload.to_key) { msgStringOut = JSON.stringify( {task :'chat_message' ,payload:{from_key:connection.key ,msg :msgString.payload.msg} });

clients[i].sendUTF(msgStringOut); console.log((new Date()) + ' message sent to: ' + connection.remoteAddress + '.'); }; }; }; });

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = JSON.parse(message.utf8Data); if (msgString.task == 'chat_message') { for(var i in clients){ if (clients[i].key == msgString.payload.to_key) { msgStringOut = JSON.stringify( {task :'chat_message' ,payload:{from_key:connection.key ,msg :msgString.payload.msg} });

clients[i].sendUTF(msgStringOut); console.log((new Date()) + ' message sent to: ' + connection.remoteAddress + '.'); }; }; }; });

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = JSON.parse(message.utf8Data); if (msgString.task == 'chat_message') { for(var i in clients){ if (clients[i].key == msgString.payload.to_key) { msgStringOut = JSON.stringify( {task :'chat_message' ,payload:{from_key:connection.key ,msg :msgString.payload.msg} });

clients[i].sendUTF(msgStringOut); console.log((new Date()) + ' message sent to: ' + connection.remoteAddress + '.'); }; }; }; });

/* Events on websocket connection */ connection.on('message', function(message) { var msgString = JSON.parse(message.utf8Data); if (msgString.task == 'chat_message') { for(var i in clients){ if (clients[i].key == msgString.payload.to_key) { msgStringOut = JSON.stringify( {task :'chat_message' ,payload:{from_key:connection.key ,msg :msgString.payload.msg} });

clients[i].sendUTF(msgStringOut); console.log((new Date()) + ' message sent to: ' + connection.remoteAddress + '.'); }; }; }; });

connection.on('close', function(connection) { clients.splice(index, 1); userBroadcast(); console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); });

connection.on('close', function(connection) { clients.splice(index, 1); userBroadcast(); console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); });

connection.on('close', function(connection) { clients.splice(index, 1); userBroadcast(); console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); }); });

var userBroadcast = function() { var usernames = [] for(var i in clients){ usernames.push( {username: clients[i].username ,key : clients[i].key}); }; for(var i in clients){ clients[i].sendUTF( JSON.stringify( {task :'user_broadcast' ,payload:usernames})); }; };

Here’s the userBroadcast

function

var userBroadcast = function() { var usernames = [] for(var i in clients){ usernames.push( {username: clients[i].username ,key : clients[i].key}); }; for(var i in clients){ clients[i].sendUTF( JSON.stringify( {task :'user_broadcast' ,payload:usernames})); }; };

var userBroadcast = function() { var usernames = [] for(var i in clients){ usernames.push( {username: clients[i].username ,key : clients[i].key}); }; for(var i in clients){ clients[i].sendUTF( JSON.stringify( {task :'user_broadcast' ,payload:usernames})); }; };

Hello Alex! Hello Alex!

Hi Alan!Hi Alan!

mobile phone push alerttodo list

alerts from background processfile ready on server

database alert fileorder which needs to be approved

tasklistsappointment

Communicate with Things

“Oh my Gosh! I love this song”

move

Lego Mindstorms

Brick

Motors

Motors

Light Sensor

Touch Sensor

Task

Payload

Pick Order

Order Contents

jsonMsg = JSON.stringify( {task : 'pick_orders' ,payload : {'Red' : '1' ,'Green' : '1' } } ); ws_connection.send (jsonMsg);

Send

jsonMsg = JSON.stringify( {task : 'pick_orders' ,payload : {'Red' : '1' ,'Green' : '1' } } ); ws_connection.send (jsonMsg);

Send

jsonMsg = JSON.stringify( {task : 'pick_orders' ,payload : {'Red' : '1' ,'Green' : '1' } } ); ws_connection.send (jsonMsg);

Send

ws_connection.onmessage = function(message) { var jsonMsg = JSON.parse(message.data); if (jsonMsg.task == 'pick_orders_started') { console.log ('Picking Process Started'); } else if (jsonMsg.task == 'orders_picked') { console.log ('Order Completed'); } };

Receive

ws_connection.onmessage = function(message) { var jsonMsg = JSON.parse(message.data); if (jsonMsg.task == 'pick_orders_started') { console.log ('Picking Process Started'); } else if (jsonMsg.task == 'orders_picked') { console.log ('Order Completed'); } };

Receive

ws_connection.onmessage = function(message) { var jsonMsg = JSON.parse(message.data); if (jsonMsg.task == 'pick_orders_started') { console.log ('Picking Process Started'); } else if (jsonMsg.task == 'orders_picked') { console.log ('Order Completed'); } };

Receive

ws_connection.onmessage = function(message) { var jsonMsg = JSON.parse(message.data); if (jsonMsg.task == 'pick_orders_started') { console.log ('Picking Process Started'); } else if (jsonMsg.task == 'orders_picked') { console.log ('Order Completed'); } };

Receive

Track

Lightsensor Pushrod

Collection Box

Track

Lightsensor

Pushrod

Brick

Emergency BrakeCollection Box

Order:1 x Red 1 x Green

Alan Arentsenalan.arentsen@ordina.nl

alanarentsen.blogspot.com

Alex Nuijtenalex.nuijten@ordina.nl

nuijten.blogspot.com

Questions and Answers

Recommended