2017-02-19 75 views
0

我有一个问题,即时通讯想要从FeederBot函数内访问data.names,所以我可以访问从客户端命名的名称。但我不知道如何。我想让这个变量在feeder bot里面访问,这个.nickname = data.names。任何帮助?需要访问变量之外的功能和另一个

io.on('connection', function(socket) { 

    socket.on('login', function(data) { 
     console.log("User connected with id:" + data.uuid + " Bot names: " + data.names); 
     socket.room = data.uuid; 
     socket.join(data.uuid); 

     if (data.type == "server") { 
      io.sockets.in(socket.room).emit("force-login", "server-booted-up"); 
     } 
    }.bind(this)); 

    socket.on('pos', function(data) { 
     //console.log(socket.room + " : " + data); 
     io.sockets.in(socket.room).emit('pos', data); 
    }); 

    socket.on('cmd', function(data) { 
     console.log(data); 
     io.sockets.in(socket.room).emit('cmd', data); 
    }); 

    socket.on("spawn-count", function(data) { 
     io.sockets.in(socket.room).emit("spawn-count", data); 
    }); 

    socket.emit("force-login", "startup"); 

}); 

function FeederBot(bot_id, agent, bot_number, server) { 

    this.bot_id = bot_id; //ID of bot for logging 
    this.interval_id = 0; //here we will store setInterval's ID 
    this.ball_id = null; 
    this.server = ''; //server address will be stored here 
    this.client = new AgarioClient('Bot_' + this.bot_id); //creates new client 
    this.client.debug = 0; 
    this.client.agent = agent; 
    this.client.headers['user-agent'] = config.userAgent; 
    if (facebookManager.hasAvailableToken()) { 
     this.client.auth_token = facebookManager.getToken(); 
    } 
    this.isOnFeedMission = false; this.nickname = "Exper" 

    this.lastsent = {minx: 0, miny: 0, maxx: 0, maxy: 0}; 
    this.onboard_client(server, bot_number); 
} 
+0

有很多的数据在你的代码中,在每个套接字事件处理程序中。你想要哪一个? – RomanPerekhrest

+0

从登录处理程序 – exper

回答

1
var outsideVar = null; 

function functionOne() { 
    outsideVar = 1; 
} 

function functionTwo() { 
    console.log(outsideVar); 
} 

functionOne(); // set the value of your var 
functionTwo(); // output in console should be 1 

只是你在哪里定义瓦尔范围一起来看看。 JS工程结构在这种情况下,你都不能访问你的函数之前定义的var定义,并在您的函数相同范围级别定义

编辑:为更好地理解

var dataStorage = null; // before you enter any { scope with socket 

{ 
    // ... 
    socket.on('login', function(data) { 

    dataStorage = data; // <<- write data to the global var dataStorage 

    console.log("User connected with id:" + data.uuid + " Bot names: " +  data.names); 
    socket.room = data.uuid; 
    socket.join(data.uuid); 

    if (data.type == "server") {  
     io.sockets.in(socket.room).emit("force-login", "server-booted-up"); 
    } 

    }.bind(this)); 
    // .. 
} 

function FeederBot(bot_id, agent, bot_number, server) { 

    this.bot_id = bot_id; //ID of bot for logging 
    this.interval_id = 0; //here we will store setInterval's ID 
    this.ball_id = null; 
    this.server = ''; //server address will be stored here 
    this.client = new AgarioClient('Bot_' + this.bot_id); //creates new client 
    this.client.debug = 0; 
    this.client.agent = agent; 
    this.client.headers['user-agent'] = config.userAgent; 
    if (facebookManager.hasAvailableToken()) { 
    this.client.auth_token = facebookManager.getToken(); 
    } 
    this.isOnFeedMission = false; 
    this.nickname = "Exper" 

    // and here you can access the global var again. 
    // make sure u test for not null and the property exists 
    if(!!dataStorage) { 
    if(dataStorage.hasOwnProperty('names')){ 
     this.nickname = data.names; 
    } 
    } 

    this.lastsent = {minx: 0, miny: 0, maxx: 0, maxy: 0}; 
    this.onboard_client(server, bot_number); 

} 
+0

在登录处理程序中它有data.names。这是从客户即时使用。里面的feederbot函数im想要this.nickname为= data.names。 – exper

+0

你有没有检查过你在这两个函数中的data.names都有相同的焦点?我认为有分歧。导出到您之前定义的var,并且您可以从外部访问它。 – mtizziani

+0

我真的不明白,因为即时通讯不是很好的JavaScript,我的朋友给我发送了大部分的代码添加到。 – exper