我试图编写基本的在线游戏,只是为了检查我目前的网络编程水平。这是我现在的一些代码:
var io = require('socket.io') (serv, {});
io.sockets.on('connection', function(socket) {
console.log('1 '+socket);
function fight (player,monster) {
console.log('2 '+socket);
monsterData = {};
monsterData.name = monster;
switch(monster){
case 'rat 1st level':
monsterData.hp = 50;
monsterData.attack = 1;
monsterData.money = Math.floor(Math.random()*3)+1;
break;
}
result = attack(player,monsterData);
console.log('3 '+socket);
if(result.winner === 'player'){
db.account.findOne({'username':player.username},function(err,player){
money = player.money + monsterData.money;
db.account.update({'username':player.username},{$set:{'money':money}});
socket.emit('addToChat',{type:'system',message:'You win battle against "'+monster+'"'})
});
}
}
console.log('4 '+socket);
socket.on('click',function(data){
db.account.find({'username':data.username,'socket':data.socket},function(err,res){
if(res.length > 0) {
position = 0;
//console.log('x - '+data.x+'; y- '+data.y);
/* RIGH BAR */
if(data.x>(1024-200) && data.x<1024 && data.y>80) {
// if(data.y>50&&data.y<80)
// position=1;
if(data.y>80&&data.y<110){
monster='rat 1st level';
}
if(data.y>110&&data.y<140){
monster='2ndMonster';
}
if(data.y>140&&data.y<170){
monster='3rdMonster';
}
if(data.y>170&&data.y<210){
monster='4thMonster';
}
db.account.findOne({'username':data.username},function(err,res){
db.account.update({'username':res.username},{$set:{'inFight':true,'monster':monster}});
io.sockets.emit('fightStart',{'username':res.username,'monster':monster});
result = fight(res,monster);
});
/* /RIGHTBAR */
}
//console.log(position);
}
});
});
socket.on('signIn',function(data){
isValidPassword(data,function(res){
if(res){
db.account.find({'username':data.username},function(err,player){
player = player[0];
socket.emit('signInResponse',{
success:true,
username:player.username,
password:player.password,
level:player.level,
money:player.money,
hp:player.hp,
maxhp:player.maxhp
});
});
} else {
socket.emit('signInResponse',{success:false,reason:'wrong login or password'});
}
});
});
}
所以,基本上,我可以在socket.on('signin')
中获得套接字变量,但是当我试图在函数斗争或socket.on('click')
中获取它时,它给出了我没有定义套接字的错误,或者给我错误,因为socket只是客户端的socket.id
,我无法通过它发送数据。
如何在war函数中获取可变套接字,以便能够向特定播放器发送数据。
答案 0 :(得分:0)
你应该直接使用io:
io.on('connection', function(socket){
socket.on('xxx', function(obj){
io.emit('xxx', {xxx: xxx})
})
})