簡體   English   中英

類型錯誤:socket.emit 不是函數

[英]TypeError: socket.emit is not a function

我正在嘗試編寫基本的在線游戲,只是為了檢查我當前的網絡編程水平。 這是我現在擁有的一些代碼:

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 變量,但是當我嘗試在 function socket.on('click')socket.on('click')獲取它時,它給了我未定義 socket 的錯誤,或者給我錯誤,因為 socket 只是客戶端的socket.id ,我不能用它發出數據。

我需要的

一些如何在戰斗功能中訪問可變套接字以具有向特定玩家發送數據的能力。

你應該直接使用io:

io.on('connection', function(socket){
    socket.on('xxx', function(obj){
        io.emit('xxx', {xxx: xxx})
    })
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM