Ir para conteúdo
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.

  • Obrigado! 1

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Dan Borges
      Olá,
       
      Tenho conhecimentos em C#, e ultimamente venho programando utilizando o MonoGame para desenvolver jogos. Estava procurando como é feito uma pista pseudo 3D, e achei esse artigo em JS: https://codeincomplete.com/posts/javascript-racer-v1-straight/
       
      Por ter a lógica de programação da mente, mesmo sem saber js, entendi parte do código, mas esse trecho, não:
      segments = []; for(var n = 0 ; n < 500 ; n++) { // arbitrary road length segments.push({ index: n, p1: { world: { z: n *segmentLength }, camera: {}, screen: {} }, p2: { world: { z: (n+1)*segmentLength }, camera: {}, screen: {} }, color: Math.floor(n/rumbleLength)%2 ? COLORS.DARK : COLORS.LIGHT }); } A primeira vista entendi que ele está adicionando valores ao array segments com o método push. Mas, os valores colocados, não fazem sentido para mim.
      É como se fosse criada uma classe dinamicamente (que contenha as variáveis:, index, p1, p2...) sem precisar declará-la.
      Seria basicamente isso? Ele criou um objeto que representa uma classe, mas sem nomeá-la, ou algo semelhante?
    • Por Incompetech
      Então.. a um tempo atrás eu fiz um post pedindo ajuda em relação a tooltip mas não obtive resposta, então decidi deixar essa funcionalidade para depois.
      Como disse na minha primeira pergunta eu estou praticando HTML / CSS / JS ... então comecei a fazer uma entrada para MU ONLINE que foi um dos jogos que mais joguei em épocas de LAN HOUSE. Então o que quero perguntar a vocês é o seguinte:

      Como podem ver nessa imagem acima ela tem um total de 10 itens que são icones pequenos que ao clicar neles logo ele irá dar loading na foto do item completo, gostaria de saber como fazer isso.
       
      No meu caso eu criei essa entrada no Photoshop: 
       
      E no caso gostaria de fazer a mesma coisa porém clicando nas setas que estão do lado da box como podem ver no centro da imagem.
      Para isto eu devo usar Js? E qual código devo usar, eu sou super perdido com Js.
      Agradeço desde já! :D

    • Por Incompetech
      Olá a todos. Então.. eu estava praticando um pouco de HTML / CSS e no fim cheguei a um resultado bem legal e simples claro disto aqui:
       
      Eu sei que alguns vão reconhecer isto.. Mas para quem não conhece é algo relacionado ao game MU ONLINE.
      Enfim. Como podem ver eu inventei alguns adicionais que no caso são as características dessa armadura, porém eu gostaria de aplicar um efeito em que esses adicionais apareçam quando eu passar o mouse por cima da imagem da armadura.. como se fosse dentro do game.
      Abaixo vão alguns exemplos:
      Efeito aplicado em um projeto HTML: 

      O mesmo efeito In Game:
       
      Sei que pode parecer algo meio trivial mas gostaria muito de aprender como eu faço para criar algo igual, se puderem me ajudar eu agradeço de coração.
    • Por VCastilho
      Bom Dia

      Desenvolvi um filtro HTML e estou com dificuldades em criar o JavaScript para o funcionamento do mesmo, poderiam em ajudar a criar esse JS?
      Segue o código:
       
      <div id = "filtro"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <style disabled> #filtro { border-style:double; } #button1 { width: 120px; position: inherit; right: 10px; background-color: #e00505; font-size: 12px; FLOAT: right } h4 { font-size: 18px; border-style: inset; } select { border: 1px solid #000; box-sizing: border-box; width: 124px; border-radius: 5px; height: 25px; padding: 3px; } section label { width: calc(100% / 4); color: red; text-align: center; } section { display: flex; flex-wrap: wrap; } h4/ { border-style:double; } @media screen and (max-width:768px) { section label { margin-bottom: 20px; width: 100%; } } </style> <h4 style="text-align: center;">Personalize o seu Kit de Segurança</h4><br><br> <form action="#" id="form"> <section> <label> <b> Tipo do seu Kit </b><br> <select name="speed" id="speed" style=" "> <option desable>Selecione</option> <option>Residencial</option> <option>Comercial</option> </select> </label> <label> <b>Qualidade de Seu Kit</b><br> <select name="files" id="files" style=" "> <option desable> Selecione </option> <option value="HD">HD</option> <option value="Full HD">Full HD</option> <option value="Analógica">Analógica</option> </select> </label> <label> <b> Quantidade de Câmeras </b><br> <select name="number" id="number" style=" "> <option desable> Selecione </option> <option>1 Câmera</option> <option>2 Câmeras</option> <option>3 Câmeras</option> <option>4 Câmeras</option> <option>5 Câmeras</option> <option>6 Câmeras</option> <option>7 Câmeras</option> <option>8 Câmeras</option> <option>9 Câmeras</option> <option>10 Câmeras</option> <option>11 Câmeras</option> <option>12 Câmeras</option> <option>13 Câmeras</option> <option>14 Câmeras</option> <option>15 Câmeras</option> <option>16 Câmeras</option> </select> </label> <label> <b> Selecione a Marca </b><br> <select name="salutation" id="salutation"> <option desable selected>Selecione</option> <option>Intelbras</option> <option>Hikvision</option> <option>Outras</option> </select> </label> </section> <BR> <BR> </form> </div> <br> <br> <button class="kd-filter-button" id="button1">Ver resultados</button> Seria bom, se possível o botão funcionar fora da tag "form" pois para personalizar fica melhor

       
    • Por MateusOFCZ
      Olá, estou desenvolvendo um BOT utilizando java, javascript e node.js, gostaria de saber se tem como eu fazer um painel em java (arquivo executável) onde tem um campo de texto (Que é digitado um tema, exemplo "Brasil"), uma lista com 3 itens (Quem é, O que é e A história do(a), você iria selecionar, por exemplo no campo de texto você digitou "Brasil" e na lista você selecionaria "A história do(a)"...) como faço pra quando clicar no botão "Enviar" ele iria executar um comando em node.js adicionando as informações (Tema e Opção).

       


      Caso não tenha entendido posso tentar explicar de uma forma mais clara!
×

Informação importante

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