39
Real-Time Collaborative Drawing Friday, 27 September 13

Real-time collaborative drawing

Embed Size (px)

DESCRIPTION

How to make a real-time collaborative drawing app using HTML5 Canvas, Websockets & Node.JS

Citation preview

Page 1: Real-time collaborative drawing

Real-Time Collaborative Drawing

Friday, 27 September 13

Page 2: Real-time collaborative drawing

About Me

Friday, 27 September 13

Page 3: Real-time collaborative drawing

Friday, 27 September 13

Page 4: Real-time collaborative drawing

node-js-draw.jit.su/

Friday, 27 September 13

Page 5: Real-time collaborative drawing

Lets break this down

Friday, 27 September 13

Page 6: Real-time collaborative drawing

A Web Server

Friday, 27 September 13

Page 7: Real-time collaborative drawing

A Canvas

Friday, 27 September 13

Page 8: Real-time collaborative drawing

Real-time Communication

Friday, 27 September 13

Page 9: Real-time collaborative drawing

Node.js via Express.jsHTML5 Canvas via Paper.jsWebsockets via socket.io

Friday, 27 September 13

Page 10: Real-time collaborative drawing

Run it yourself!

Friday, 27 September 13

Page 11: Real-time collaborative drawing

http://node.js.org

Friday, 27 September 13

Page 12: Real-time collaborative drawing

$ git clone https://github.com/byrichardpowell/drawing.git

$ cd drawing

Friday, 27 September 13

Page 13: Real-time collaborative drawing

$ npm install

Friday, 27 September 13

Page 14: Real-time collaborative drawing

$ node app.js

Friday, 27 September 13

Page 15: Real-time collaborative drawing

http://127.0.0.1:3000/

Friday, 27 September 13

Page 16: Real-time collaborative drawing

Express.js

Friday, 27 September 13

Page 17: Real-time collaborative drawing

app.js node_modules package.json public routes views

Friday, 27 September 13

Page 18: Real-time collaborative drawing

var express = require('express') , routes = require('./routes')

app.configure(function(){ app.set('port', 3000);});

app.get('/', routes.index);

var server = http.createServer(app) .listen(app.get('port'));

app.js

Friday, 27 September 13

Page 19: Real-time collaborative drawing

var server = http.createServer(app).listen( app.get('port') );

var io = require('socket.io').listen( server );

app.js

Friday, 27 September 13

Page 20: Real-time collaborative drawing

socket.on('startPath',function(data,id) {

socket.broadcast.emit('startPath', data,

id )

})

app.js

Friday, 27 September 13

Page 21: Real-time collaborative drawing

Paper.js

Friday, 27 September 13

Page 22: Real-time collaborative drawing

extends layoutblock content

canvas(id="draw", resize="true", keepalive="true" )

script(type="text/paperscript", src="...", canvas="draw")

/views/index.js

Friday, 27 September 13

Page 23: Real-time collaborative drawing

paperjs.org/tutorials/interaction/working-with-mouse-vectors/

Friday, 27 September 13

Page 24: Real-time collaborative drawing

function onMouseDrag(event) {

var step = event.delta / 2 step.angle += 90 var top = event.middlePoint + step var bottom = event.middlePoint - step

continuePath( top, bottom, sessionId )

emit("continuePath", {top: top, bottom: bottom}, sessionId)

}

/public/javascripts/draw.js

Friday, 27 September 13

Page 25: Real-time collaborative drawing

io.on( 'continuePath', function( data, sessionId ) {

continuePath(data.top, data.bottom, sessionId)

view.draw(); })

/public/javascripts/draw.js

Friday, 27 September 13

Page 26: Real-time collaborative drawing

function continuePath(top,bottom,sessionId) {

var path = paths[sessionId] path.add(top) path.insert(0, bottom)

}

/public/javascripts/draw.js

Friday, 27 September 13

Page 27: Real-time collaborative drawing

Summarise

Friday, 27 September 13

Page 28: Real-time collaborative drawing

1. Express.js Serves the HTML

Friday, 27 September 13

Page 29: Real-time collaborative drawing

2. A user draws.Paper.js intercepts the events

and draws

Friday, 27 September 13

Page 30: Real-time collaborative drawing

3. Socket.io passes the draw data to

Express.js

Friday, 27 September 13

Page 31: Real-time collaborative drawing

4. Express Passes the draw data backto every other user

Friday, 27 September 13

Page 32: Real-time collaborative drawing

5. Paper.js draws other peoplesdrawings using their sessionId

to keep track of different paths

Friday, 27 September 13

Page 33: Real-time collaborative drawing

Deployment

Friday, 27 September 13

Page 34: Real-time collaborative drawing

www.nodejitsu.com/

Friday, 27 September 13

Page 35: Real-time collaborative drawing

$ npm install jitsu -g

$ jitsu login

Friday, 27 September 13

Page 36: Real-time collaborative drawing

$ jitsu deploy

Friday, 27 September 13

Page 37: Real-time collaborative drawing

Friday, 27 September 13

Page 38: Real-time collaborative drawing

github.com/johnmclear/draw

Friday, 27 September 13