11496 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Je viens de commencer un code avec node.js pour un cours.
Le but est de créer un site multi-utilisateurs, ou chacun pourrait dessiner avec son curseur. Jusque-là, c'est ok, ça dessine des lignes.

Mon but maintenant serait de remplacer ces lignes par des images. Je m'explique. J'aimerai avoir une série d'image définies (dans un tableau ?) et que chaque fois que le curseur bouge de par exemple 20px, l'image suivante apparait à la position du curseur. Je pense que ça ne doit pas être très compliqué à faire pour quelqu'un qui connait.

Merci pour votre aide ! Smiley smile

P.S. liens/tutos bienvenus si vous avez la flemme de me montrer !


<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8" />
		<title>Exercice 02 / Server WebSocket</title>
	</head>

	<body>

	<canvas id="screen"></canvas>

		<!-- SCRIPTS -->
		<script type="text/javascript">

			window.WebSocket = window.WebSocket || window.MozWebSocket;

			if(!window.WebSocket){
				// pour les navigateurs qui n'acceptent pas WS
				alert("Il faut changer de navigateur.");
			}else{
				// pour les navigateurs qui acceptent WS
				
				// TOUT LE CODE VIENT ICI
				// ----------------------

				// connection au serveur WS
				var connection = new WebSocket('ws://localhost:1337');

				// message automatiquement envoyé à la connexion d'un utilisateur
				connection.onopen = function (){
					connection.send('hello je me connecte');
				}

				connection.onmessage = function(message){
					console.log(message);
					var json = JSON.parse(message.data);

					//document.body.innerHTML = json.data;

					try{
						var valeurs = JSON.parse(json.data);
						//document.body.innerHTML += "<br/> posx = "+valeurs.posx;
						//document.body.innerHTML += " posy = "+valeurs.posy;
						if(isLine){
							ctx.lineTo(valeurs.posx,valeurs.posy);
							ctx.stroke();
						}else{
							ctx.beginPath();
							ctx.lineWidth = 3;
							ctx.strokeStyle = '#ff0000';
							ctx.moveTo(valeurs.posx,valeurs.posy);
							isLine = true;
						}
					}catch(e){
						//alert("Ceci n'est pas un tableau JSON");
					}

					console.log(json);
				};

				var canvas = document.getElementById("screen");
				canvas.width = window.innerWidth;
				canvas.height = window.innerHeight;
				var ctx = canvas.getContext('2d');
				var isLine = false;

				// à chaque clic
				document.body.addEventListener("click", envoiMessage);

				// récupère les coordonnées de la souris et les renvois
				function envoiMessage(e){
					var message = {posx:e.x , posy:e.y};
					connection.send(JSON.stringify(message));
				}

			}

		</script>

	</body>

</html>





// définition du port
var webSocketServerPort = 1337;

// chargement de la bibliothèque
var webSocketServer = require('websocket').server;

// définir le protocole de communication
var http = require('http');

// initialisation du serveur http
var server = http.createServer(function(request,response){});

// création d'un tableau de clients (utilisateurs)
var clients = [];

server.listen(webSocketServerPort, function(){
	console.log("Server is running !" + webSocketServerPort); // message dans la console
});

// initialisation du serveur websocket (ws)
var wsServer = new webSocketServer({
	httpServer:server
});




// GESTION PAR LE WS SERVER
// ----------------------------------------------------------------------------------------------------------------------------------------

// se connecte au serveur
wsServer.on('request', function(request){
	var connection = request.accept(null, request.origin);
	console.log("le WS server a reçu une request d'initialisation");

	// gestion des clients (utilisateurs)
	var date = new Date();
	// on nomme les clients d'après l'heure (heure, minutes, secondes, millisecondes)
	var clientName = 'client_'+date.getHours()+date.getMinutes()+date.getSeconds()+date.getMilliseconds();
	clients[clientName] = connection;

	// message automatiquement envoyé à la connexion d'un utilisateur
	connection.on('message', function(message){
		console.log(message);

		// pour tous les clients "name" que vous trouvez dans clients
		for(var clientName in clients){
			clients[clientName].sendUTF(JSON.stringify({data:message.utf8Data, name:clientName}));
		}
	})

});

// se déconnecte du serveur
wsServer.on('close', function(connection){

});