Sending client-> server-> client messages to socket.io on node.js

I am using NodeJS + Socket.IO for a simple web game. It is working. Why?

Here is my server.js

 var app = require('express').createServer(); var io = require('socket.io').listen(app); io.sockets.on('connection', function (socket) { socket.on('set nickname' , function (nickname) { socket.nickname = nickname; console.log(nickname + ' just connected!'); }); socket.on('msg' , function (msg) { socket.msg = msg; io.sockets.emit('response', msg); }); socket.on('updatePlayer' , function (updatePlayer) { console.log("Someone just moved on the map!"); }); }); app.listen(8080); 

The reason I know works because when I load the page and this script executes:

 // SERVER STUFF socket.on('connect', function () { console.log('We are connected!'); name = $(".name").val(); this.emit('set nickname', name, function (success) {}); msg = name + "|" + currX + "|" + currY + "|" + currentMap; this.emit('msg', msg, function (success) {}); socket.on('response', function (data) { var theMsg = data.split("|"); sayDialog("New player! " + theMsg[0] + " connected on map " + theMsg[3] + " on coordinates (" + theMsg[1] + "," + theMsg[2] + ")"); }); }); 

I get in my dialog box ("CSS div") something like New player! weka connected on map 4 on coordinates (10,5) New player! weka connected on map 4 on coordinates (10,5)

OK, cool, that's how it works! However, when I "move", I try to send a message to the server using this

  socket.on('updatePlayer', function () { console.log("Testing..."); }); 

I don’t even see console say Testing. I do not know why.

+4
source share
2 answers

Client side. The player moves and the movePlayer function is executed:

 function movePlayer () { socket.emit ('player move', {map: 4, coords: '0.0'}); } socket.on ('updatePlayer', function (msg) { console.log ('A player moves on map ' + msg.map + ' on coords ' + msg.coords); }); 

Server side. . When someone moves, "updatePlayer" is emitted for every socket except the original player. On each side of the client, updatePlayer is intercepted.

 socket.on ('player move', function (msg) { io.sockets.emit ('updatePlayer', msg); }); 
+11
source

Server side

 socket.on('updatePlayer', function(updatePlayer){ console.log("Someone just moved on the map!") updatePlayer() // will trigger the client side function }); 

Client side

 socket.emit('updatePlayer', function(){ console.log('testing'); }) 
+1
source

Source: https://habr.com/ru/post/1412571/


All Articles