Вопрос по jquery, node.js, javascript, sockets – Отправка сообщений client-> server-> client на socket.io на node.js

8

Я использую NodeJS + Socket.IO для простой веб-игры. Оно работает. Зачем?

Вот мой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);

Я знаю, что это работает потому, что, когда я загружаю страницу и выполняется этот скрипт:

// 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] + ")");
    });
});

Я получаю в своем диалоговом окне ("CSS div") что-то вродеNew player! weka connected on map 4 on coordinates (10,5)

ОК, круто, так работает! Однако, когда я "двигаюсь" Я пытаюсь отправить сообщение на сервер, используя это

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

Я даже не вижуconsole Тестирование. Я не знаю почему.

Вы должны запустить его с сервера на клиент: например, this.emit ("updatePlayer", msg); с сервера. Wilk
@ векка, как предположил Уилк, - нужноemit событие ManseUK
как ты запускаешьupdatePlayer событие ? ManseUK
Это неsocket.on('updatePlayer', function () { но как я не думаю, что я запускаю это ... как бы я это инициировал? nn2

Ваш Ответ

2   ответа
15

Client-side. Игрок перемещается и выполняется функция 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. Когда кто-то двигается, «updatePlayer» испускается для каждого сокета, кроме оригинального плеера. На каждой стороне клиента updatePlayer перехватывается.

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

Server side

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

Client side

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

Похожие вопросы