У меня есть вопрос.Я новичок в nodejs, так что не судите: D.Итак, позвольте мне объяснить, что я хочу сделать.Я хочу сделать игру, где сервер написан на nodejs.Я использую сокеты и события.У меня такой вопрос: когда я впервые подключаюсь к серверу, я использую переменную currentUser для хранения информации, связанной с текущим пользователем (имя espacialy), но когда подключается другой пользователь, все, что находится внутри currentUser, стирается для всех остальных пользователей.кроме него.Например подключается 3 пользователя: aaa, bbb, ccc.Когда aaa подключается, currentuser для aaa сохранит имя aaa.Когда bbb соединяется, информация в currentUser для aaa стирается, а значение остается неопределенным, а currentUser для bbb будет хранить имя bbb.То же самое для ccc.currentUser для aaa и bbb будет иметь неопределенное значение, а для ccc будет хранить имя ccc;Есть ли способ сохранить имя для каждого пользователя и сохранить его внутри io.on («соединение»,), а не глобально?
const express=require('express');
const app=express();
const server=require('http').createServer(app);
const io=require('socket.io').listen(server);
app.set('port',process.env.PORT || 3000);
let socketUsers={};
let usersON={};
io.on("connection",function(socket){
socket.on("CONNECTION",function(){
socket.emit("CONNECTION_ON");
});
let currentUser;
let partenerUser;
socket.on("USER_ON",function(data){
if(usersON[data.name]==null)
{
this.currentUser={
name:data.name,
status:data.status,
position:"0;0;0"
};
process.stdout.write("User \""+data.name+"\" ,status("+data.status+") CONNECTED. \n");
socket.emit("ONLINE_USERS",usersON);
socket.emit("USER_OK");
usersON[data.name]=data.status;
socketUsers[data.name]=socket;
socket.broadcast.emit("NEW_USER_CONNECTED",this.currentUser.name);
}
else
{
process.stdout.write("User \""+data.name+"\" ,status("+data.status+") EXISTS. \n");
socket.emit("USER_EXISTS");
}
});
socket.on("USER_SEARCH",function(data){
console.log(this.currentUser);
console.log(usersON);
console.log("----------------");
console.log(usersON[data.name]);
console.log(data.name.toString());
console.log(this.currentUser);
console.log(currentUser);
if(usersON[data.name]!=null && socketUsers[data.name]!=null && this.currentUser.name!==data.name.toString())//utilizatorul exista
{
console.log(usersON[data.name]);
if(usersON[data.name]!=="OFF")
{
io.to(socketUsers[data.name].id).emit("USER_WANTTOPLAY",currentUser);// =? do you want to play?
socket.emit("WAIT_RESPONSE");
}
else
{
socket.emit("USER_OFF");
}
}
else
{
socket.emit("USER_NOTFOUND");// => INSERT OTHER username
}
});
socket.on("USER_WANTTOPLAY",function(data){
console.log("AICI");
this.partenerUser={
name:data.name,
status:data.status,
position:"0;0;0"
}
});
socket.on("RESPONSE_OK",function(data){
io.to(socketUsers[partenerUser.name].id).emit('RESPONSE_YYES');
});
socket.on("RESPONSE_NO",function(data){
io.to(socketUsers[partenerUser.name].id).emit('RESPONSE_NNO');
});
});
server.listen(app.get('port'),function(){
console.log("=========SERVER IS RUNNING=========");
});