Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

welwvs

Problema em chamar var dentro do switch

Recommended Posts

Olá povoestou tendo um problema e não estou descobrindo oque eu estou fazendo  de errado.

 

Eu criei um var = currentUser;

 

Em seguida no switch, dentro de um case: "LOGAR" eu queria chamar a currentUser para receber uns valores

 

E depois em outro case: "PING2" eu queria trabalhar com os dados que salvei na currentUser.

 

Eu percebi alguns problemas que no case: "PING2" A currentUser estava vazia, mais no case "LOGAR" ela realmente recebeu os valores usei um console.log para ter certeza que foram salvas.

 

eu estou com duvidas se no case: "LOGAR" eu chamei o var currentUser de forma correta, porque ele só tem valores dentro dele apenas no case: "LOGAR" nos outros case ele fica vazio

 

var shortId 		= require('shortid');//import shortid lib
var dgram = require('dgram');// importa a biblioteca do node para sockets UDP
var socket = dgram.createSocket('udp4');

var clients	= [];//storage clients
var clientLookup = {};// cliends search engine
var sockets = {};//storage sockets
var database_model = require('./Models/database_model');


database_model.connect(function (err_connect) {

});


socket.on('message', function(message,datagram_info) {//"message" armazena o pacote JSON, "datagram_info" armazena o IP e a PORTA do cliente
                                                      //que fez a abertura do socket (ex: 127.0.0.1 e 8080)
 console.log('O servidor recebeu uma messagem: '+message+' de '+datagram_info.address);
    
	var data = JSON.parse(message);//converte  o conteudo do pacote JSON message
	var currentUser;// nao ta recebendo nada não sei porque.
	
	switch(data.id )
	{


	 //começa 
      case "PING"://se estivessemos utlizando TCP seria socket.on('PING',function(){ //processamento do socket}); como eu faco em 
	      console.log(currentUser);
		 console.log('[INFO] teste ping foi recebido !!! ');
	     var response = "PONG"+','+"pong!!!"+','+"test";//formata os dados com o separador virgula para serem enviados de volta ao Sender
		 var msg = new Buffer(response);//bufering
		 console.log('send response to client');
		 
		 //enviando para o cliente, Sending Messages Back to Sender "Socket.Emit"
	     socket.send(msg,
                0,
                msg.length,
                datagram_info.port,//port of Sender
                datagram_info.address//IP of Sender
				    );
				
	   

	  break;
	  //termina
	  
	  
	 
	  
	  
	  
	  case "LOGAR":
		
		console.log('[INFO] Player: ' + data.nome + ', ' + data.senha + ' connected!');		
		database_model.verify_fk1(data.nome, data.senha, function ( result) 
		{
			
		
	   
         if (result == true) 
		    {
				  console.log("Os Dados do usuario estão corretos");
		          console.log('[INFO] O usuario ' + data.nome + ' conectou. Carregando informações ... !');
		   
		          				  
				  var response = "RespostaLOGAR"+','+"TODOS OS DADOS FORAM CARREGADOS COM SUSSESSO, você ESTA LIBERADO PARA SELEÇÃO DE PERSONAGEM";
						var msg = new Buffer(response);
						console.log('O pacote de reposta do login com sussesso foi enviada');
		
						socket.send(msg,
						0,
						msg.length,
						datagram_info.port,//port of Sender
						datagram_info.address//IP of Sender
						);		
				  			  			        
		          
				  
				   
				     database_model.carregardados(data.nome, function (err, rows){
					  
					  if (err) { console.error(err); }
				   
						console.log('[INFO] cheguei com os dados: **************');
						console.log('Cli_id: '+rows[0].cli_id);
						console.log('cli_personagem1: '+ rows[0].cli_personagem1);												
						console.log('cli_personagem2: '+ rows[0].cli_personagem2);						
						console.log('cli_personagem3: '+ rows[0].cli_personagem3);						
						console.log('cli_personagem4: '+ rows[0].cli_personagem4);						
						console.log('[INFO] fim                   **************');
						
						currentUser = 
						{
						name:data.nome,
						id:shortId.generate(),
						socketID:socket.id,
						pass:data.senha,
						port:datagram_info.port,
						address:datagram_info.address,
						cliID:rows[0].cli_id,
						cliPERID1:rows[0].cli_personagem1,
						cliPERID2:rows[0].cli_personagem2,
						cliPERID3:rows[0].cli_personagem3,
						cliPERID4:rows[0].cli_personagem4
						} 
				  
						clients.push(currentUser);//add currentUser in clients list
						clientLookup[currentUser.id] = currentUser;//add client in search engine
						sockets[currentUser.socketID] = socket;//add currentUser socket
				  
						console.log('Dados armazenados no currentUser: '+currentUser.id+','
																 +currentUser.name+','
																 +currentUser.pass+','
																 +currentUser.cliID+','
																 +currentUser.cliPERID1+','
																 +currentUser.cliPERID2+','
																 +currentUser.cliPERID3+','
																 +currentUser.cliPERID4+',');
																 
						console.log('Total players: ' + clients.length);
						
						var response = "RespostaLOGAR2"+','+currentUser.id;
						var msg = new Buffer(response);
						console.log('O pacote de reposta do login com sussesso foi enviada');
		
						socket.send(msg,
						0,
						msg.length,
						datagram_info.port,//port of Sender
						datagram_info.address//IP of Sender
						);		
					  
						});
						
						
					
						
						
				   
				   
	        }   
		
		
	     else
			{
			 console.log("Loguin ou senha incorretos");
				 
				 var response = "INCORRECT_PASS"+','+"Usuario ou senha estão incorretos";
		          var msg = new Buffer(response);
		          console.log('pacote de erro no loguin enviado');
		
                   socket.send(msg,
                   0,
                   msg.length,
                   datagram_info.port,//port of Sender
                   datagram_info.address//IP of Sender
				   );
			 
			}
		 
		 
		});
	  
	  
	  
		
		
	  break;
	  

	   case "PING2":
		
		console.log(currentUser);;
			
		 console.log('[INFO] nome do per foi pedido');
	     		 
		 var response = "PONG2"+','+"casa";//aqui
		 var msg = new Buffer(response);//bufering
		 console.log('send response to client');
		 
		 //enviando para o cliente, Sending Messages Back to Sender "Socket.Emit"
	     socket.send(msg,
                0,
                msg.length,
                datagram_info.port,//port of Sender
                datagram_info.address//IP of Sender
				    );
				
	   
	  break;

}//END-SWITCH	
	
	
	

});
	  

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

tira o 

var currentUser; 

para fora do socket.on('message', se não você está reiniciando a variável a cada mensagem, e por isso ela nunca vai ter valor, a não ser no momento em que ela é atribuída.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu fiz aqui e ela continua ficando vazia nas outras case

 

e a forma que eu chamo ela no case "LOGAR"  para receber os valores está certa? eu percebi uma coisa fazendo uns teste se eu a apagar a var currentUser  o código funciona normalmente. estou achando q deve estar errado o jeito de chama-la q ta criando uma outra var ou invés de chamar a que criei no inicio., não sei se é isso

 

currentUser = 
						{
						name:data.nome,
						id:shortId.generate(),
						socketID:socket.id,
						pass:data.senha,
						port:datagram_info.port,
						address:datagram_info.address,
						cliID:rows[0].cli_id,
						cliPERID1:rows[0].cli_personagem1,
						cliPERID2:rows[0].cli_personagem2,
						cliPERID3:rows[0].cli_personagem3,
						cliPERID4:rows[0].cli_personagem4
						} 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

está correta a atribuição

 

quando você apaga o var, você está fazendo o que eu disse para fazer: subir o escopo.

porque ela automaticamente se torna global. (escopo mais alto).

 

você não fez certo o que eu disse. Que era fazer isso aqui:

socket.on('message', function(message,datagram_info) {
	var currentUser;//

por

var currentUser;//
socket.on('message', function(message,datagram_info) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por juniormatrix
      Olá
       
      Achei esse script aqui no fórum mesmo:
       
      $.validator.addMethod( "customEmail", function (value, element) { return this.optional(element) || /^[\w-\.]+@fulano\.com\.br$/i.test(value); }, "Por favor, insira um e-mail válido com o domínio @fulano.com.br" ); $("#formulario").validate({ ignore: ".ignore", rules: { empresa: { required: true }, nome: { required: true }, contato: { required: true }, celular: { required: true }, email: { required: true, email: true, customEmail: true }, }, }); Testei e funcionou perfeitamente, mas gostaria que liberasse mais e-mails válidos, ao invés de apenas um.

      Tem como fazer? 
       
      Se alguém puder ajudar, fico muito grato.
    • Por Alessandro Bodão
      Salve galerinha, passando pra mostrar pra vocês o novo projeto de marca que a Jatobá Estúdio desenvolveu, espero que gostem.   https://www.behance.net/gallery/166555627/Fernanda-Pinheiro-Nutricionista-Esportiva
    • Por rogerblower
      Boas pessoal, estou precisando de um calendário para agenda com crud para agendamento, mas teria que ser free.
      Obrogado.
    • Por Sapinn
      Fala galera! Tenho um site que possui alguns icones que são puxados da biblioteca flaticon , o problema é que de uma hora pra outra esses icones pararam de aparecer. No meu ambiente local funciona, mas no ambiente de produção eles não aparecem e eu recebo o seguinte erro no console: Failed to load resource: the server responded with a status of 404 () 
       
      Alguém saberia como resolver isso?
    • Por mateus.andriollo
      Carrego um conteudo Ajax e junto com ele vem HTML e JS, existe um marcador que está relacionado a um elemento HTML, quando eu clico e este elemento tem um atributo exemplo data-onload="funcaoOla()" esta função tbm carregada pelo ajax deve ser executada.
       
      Dúvida como eu faço uma chama de função desta forma, seria como exec("funcaoOla")
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.