LINUX.ORG.RU

switch в JavaSript в ответ на команду из сокета

 , ,


0

1

Пытаюсь сделать сервер на NodeJS при получении определенных запросов должен выводить результат, но сталкиваюсь с ошибкой.

const io = require('socket.io').listen(8888);
const Server = 'eventServer'
const Client = 'eventClient'
let cmd = null;

io.sockets.on('connection',function(socket) {
	socket.on(Server,function(data) {
		console.log(data)
		parseCmd(data)
	})
	socket.on('disconnect', function() {
		console.log('client disconnected')
		})
	});
	
function parseCmd(cmd) {
	switch(cmd) {
	case 'getInitDevice':
		socket.broadcast.emit("Client", cmd);
		console.log('getInitDevice');
		break;
	case 'getListDevices':
		socket.broadcast.emit("Client", cmd);
		console.log('getListDevices');
		break;
	case 'getValueDevices':
		socket.broadcast.emit("Client", cmd);
		console.log('getValueDevices');
		break;
	case 'getValueStop':
		socket.broadcast.emit("Client", cmd);
		console.log('getValueStop');
		break;
	default:
		socket.broadcast.emit("Client", cmd);
		console.log('Unknown Cmd');
	}
}


При запуске сервера получаю:
/home/splinter/workspace/iserv/SrvCollector/server.js:41
			socket.broadcast.emit("Client", cmd);
			^

ReferenceError: socket is not defined
    at parseCmd (/home/splinter/workspace/iserv/SrvCollector/server.js:41:4)
    at Socket.<anonymous> (/home/splinter/workspace/iserv/SrvCollector/server.js:14:3)
    at Socket.emit (events.js:314:20)
    at /home/splinter/workspace/iserv/SrvCollector/node_modules/socket.io/lib/socket.js:528:12

★★★★★

Ты сокет-то передай в функцию чтоле

anonymous
()
Ответ на: комментарий от korvin_

я понимаю что он пишет, но предполагаю что он, т.к. я вызываю функцию внутри socket.on уже определен, видимо я не понимаю работу интерпретатора JS.

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

я вызываю функцию внутри socket.on уже определен

Надо, чтобы socket был виден в месте определения функции, а не вызова. Можно перенести определение функции внутрь sockets.on(…), можно передать ей сокет как параметр.

Теория: lexical vs dynamic scoping.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от korvin_

Это я понимаю, просто не привык к записям типа
require('socket.io').listen(port).sockets.on(«string», func{socket.on(«string»,func{})})), все время замыливается референс на ф-ю как будто это параметр и мозг ломается.

splinter ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.