M4x201 - Javascript Technologies

Seminar 9 - Node.js

Jérôme Landré, Amine Haraoubia, Florent Libbrecht, Fabrice Meuzeret.

URCA - IUT Troyes - MMI - 2021

1. Collaborative drawing

2.a. The server code (Node JS)

const app = require('express')()
const http = require('http').Server(app)
const io = require('socket.io')(http)

var port=1234

app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index_dessin.html')
})

io.on('connection', (socket) => {
  console.log('A new user is connected...')
  socket.on('disconnect', () => {
    console.log('User disconnected...')
  });
  socket.on('c2s', (data) => {
      console.log('client->server // data (x,y): ('+data.x+', '+data.y+')')
      io.emit('s2c', data)
    })
})

http.listen(port, () => {
  console.log('listening on port '+port+'...')
})

2.b. The client code (Node JS)

<!DOCTYPE html>
<html>
    <head>
      <style>
        body {
          font-family: sans-serif;
        }
        #drawing {
          margin: 1vw;
          padding: 1vw;
          width: 600px;
          height: 400px;
          border: 1px solid #0001ff;
          border-radius: 16px;
        }
      </style>
      <script src="https://code.jquery.com/jquery-3.6.0.js"></script>
    </head>
    <body>
    <h1>Collaborative Drawing</h1>
    <div id="drawing"></div>
    <script src="/socket.io/socket.io.js"></script>
    <script>
      $(document).ready(function () {
        var socket = io()

        // source: https://ourcodeworld.com/articles/read/49/draw-points-on-a-canvas-with-javascript-html5
        $("#drawing").click(function(e){
          var x=e.clientX
          var y=e.clientY
          socket.emit('???', {x: x, y: y});
          console.log("New point sent...")
        });

        socket.on('???', function(data) {
          console.log("New point received...")
          $('<svg height="3px" width="3px"><circle cx="1" cy="1" r="1" fill="red" /></svg>')
          .css({position:"absolute",left:data.x,top:data.y})
          .appendTo($('#drawing'))
        })
      })
    </script>
    </body>
</html>

collaborative drawing with points.

3. Continuous drawing


    var mouseisdown = false

    $("#drawing").mousedown(function(event) {
      mouseisdown = true
      doSomething(event)
    }).mouseup(function(event) {
      mouseisdown = false
    })

    $("#drawing").mousemove(function(event) {
      if (mouseisdown) {
        doSomething(event)
      }
    })

    function doSomething(e){
      //Code goes here
      var x=e.clientX
      var y=e.clientY
      ???
      console.log("New point sent...")
    }

Continuous drawing.

4. Adding the color to your drawing:

Color: <select name="color" id="color">
<option value="red">red</option>
<option value="green">green</option>
<option value="blue">blue</option>
</select><br />

Changing the color.

5. Redo the drawing for new connected clients:

var listOfPoints=[]
    listOfPoints.forEach(function(point) {
        socket.emit('s2c', point)
    })

Full points drawn to any new client.