Olá!
Tem como disponibilizar uma URL para a gente poder testar a parte de conexão remota do EP? Ou então disponibilizar a Servlet que vai ser usada na correção para podermos fazer nossos testes antes de entregar?
Obrigado!
Oi Luiz,
A minha intenção é disponibilizar uma URL, mas por enquanto o servidor está incompleto. Ele responde as mensagens das etapas de conexão e preparação, mas ainda não responde do jogo.
Pretendo terminar isso amanhã. Vocês preferem que eu coloque ele online mesmo que incompleto?
Mari
A minha intenção é disponibilizar uma URL, mas por enquanto o servidor está incompleto. Ele responde as mensagens das etapas de conexão e preparação, mas ainda não responde do jogo.
Pretendo terminar isso amanhã. Vocês preferem que eu coloque ele online mesmo que incompleto?
Mari
Oi, Mari.
Não precisa colocar incompleto, não. A gente espera, afinal o nosso EP também não está completo.
Aproveito para tirar uma dúvida com relação ao protocolo: os pings que o cliente deve enviar seguem sempre o protocolo do ping (ou seja, se não responder de primeira, fica mandando op=ping) ou ping é um modo genérico de dizer que tem que ficar tentando enviar a mensagem até receber a resposta (fica mandando op=x)?
Não precisa colocar incompleto, não. A gente espera, afinal o nosso EP também não está completo.

Aproveito para tirar uma dúvida com relação ao protocolo: os pings que o cliente deve enviar seguem sempre o protocolo do ping (ou seja, se não responder de primeira, fica mandando op=ping) ou ping é um modo genérico de dizer que tem que ficar tentando enviar a mensagem até receber a resposta (fica mandando op=x)?
"Aproveito para tirar uma dúvida com relação ao protocolo: os pings que o cliente deve enviar seguem sempre o protocolo do ping (ou seja, se não responder de primeira, fica mandando op=ping) ou ping é um modo genérico de dizer que tem que ficar tentando enviar a mensagem até receber a resposta (fica mandando op=x)?"
Pelo que eu entendi da pergunta, não é nem um nem outro. Talvez ping tenha sido um nome infeliz pra essa mensagem...
Toda mensagem enviada pelo celular deve receber uma resposta - se a resposta não vier, quer dizer que o servidor tá fora do ar e temos um problema.
A mensagem "ping" é necessária pelo seguinte:
O servidor nunca inicia um contato com um celular, ele apenas responde. Então, imaginem que um celular conecta e não tem ninguém pra jogar com ele. Ele tem que esperar alguém conectar... Mas se ele nunca mais falar com o servidor, quando alguém conectar não tem como ele saber. Então, ele precisa perguntar repetidamente "chegou alguém?", "chegou alguém?" até alguém chegar pra jogar com ele. Isso também serve pro servidor saber que o celular ainda está "online".
Na verdade, o nome disso é "poll" e não "ping"... mas não vamos mudar o nome da mensagem pra não confundir.
Deu pra entender? Mas alguma dúvida?
Mais ou menos... Ainda não entendi qual o protocolo para fazer esse polling... Tem alguma mensagem específica para isso?
O protocolo é o HTTP, e vocês devem utilizar o método POST para passar os parâmetros da operação desejada. O j2me tem uma classe HttpConnection, vocês devem usá-la para fazer o que for preciso.
Supondo que o método GET fosse permitido, alguém poderia se passar por um celular acessando a URL:
http://endereçoservidor/batalha?op=conecta
E receberia de volta, em formato texto, algo como:
OK
4
Para fazer o "ping"/"poll":
http://endereçoservidor/batalha?op=ping&id=4
E receberia simplesmente:
OK
Espero colocar o servidor completo no ar hoje às 14h e pouco... Vocês querem que eu permita o método GET como descrevi acima, pra ajudar a entender as respostas e tal? Ou possso deixar só o POST funcionando?
Mari
Supondo que o método GET fosse permitido, alguém poderia se passar por um celular acessando a URL:
http://endereçoservidor/batalha?op=conecta
E receberia de volta, em formato texto, algo como:
OK
4
Para fazer o "ping"/"poll":
http://endereçoservidor/batalha?op=ping&id=4
E receberia simplesmente:
OK
Espero colocar o servidor completo no ar hoje às 14h e pouco... Vocês querem que eu permita o método GET como descrevi acima, pra ajudar a entender as respostas e tal? Ou possso deixar só o POST funcionando?
Mari
Algumas duvidas (desculpe pela falta de acentuacao... teclado desconfigurado)
1- depois que o cliente recebe a mensagem OK joga e passa para a etapa de preparacao, deve-se enviar mensagens de ping/poll em determinados intervalos? Pois o cliente pode passar muito tempo montando o seu tabuleiro antes de enviar e acredito que o servidor nao iria esperar muito tempo para que o cliente enviasse o seu tabuleiro.
2- Da mesma forma, quando ele recebe a autorizacao para mandar as suas jogadas, apesar de nao fazer sentido, o cliente pode demorar para escolher a sua jogada e envia-la. E necessario enviar algum comando de ping/poll para dizer ao servidor que o cliente ainda esta ativo?
Obrigado!
1- depois que o cliente recebe a mensagem OK joga e passa para a etapa de preparacao, deve-se enviar mensagens de ping/poll em determinados intervalos? Pois o cliente pode passar muito tempo montando o seu tabuleiro antes de enviar e acredito que o servidor nao iria esperar muito tempo para que o cliente enviasse o seu tabuleiro.
2- Da mesma forma, quando ele recebe a autorizacao para mandar as suas jogadas, apesar de nao fazer sentido, o cliente pode demorar para escolher a sua jogada e envia-la. E necessario enviar algum comando de ping/poll para dizer ao servidor que o cliente ainda esta ativo?
Obrigado!
Oi Paulo,
Não precisa de ping/poll nessas duas etapas. Eu não coloquei pq nesses casos o jogador não quer saber se o servidor mudou de estado, é o servidor que está esperando alguma informação dele. Vamos usar o ping/poll apenas quando o jogador está esperando alguma coisa de seu oponente (que ele conecte, monte seu tabuleiro ou jogue).
Vocês já conseguiram acessar o servidor? Está dando certo?
Mari
Não precisa de ping/poll nessas duas etapas. Eu não coloquei pq nesses casos o jogador não quer saber se o servidor mudou de estado, é o servidor que está esperando alguma informação dele. Vamos usar o ping/poll apenas quando o jogador está esperando alguma coisa de seu oponente (que ele conecte, monte seu tabuleiro ou jogue).
Vocês já conseguiram acessar o servidor? Está dando certo?
Mari
Mariana
Estou tendo o seguinte problema:
Utilizando da forma a seguir funciona, sem usar o DataOutputStream.
HttpConnection con = (HttpConnection) Connector.open("http://eclipse.ime.usp.br:9090/batalha?op=conecta",Connector.READ_WRITE);
Utilizando da forma a seguir, usando o writeUTF não funciona.
HttpConnection con = (HttpConnection) Connector.open("http://eclipse.ime.usp.br:9090/batalha",Connector.READ_WRITE);
DataOutputStream dataOut = con.openDataOutputStream();
dataOut.writeUTF("op=conecta");
dataOut.flush();
Com writeUTF("?op=conecta") também não e com writeUTF("conecta") também não.
O segundo caso, passando o parâmetro com writeUTF, o retorno no response é "ERRO null" .
Estou tendo o seguinte problema:
Utilizando da forma a seguir funciona, sem usar o DataOutputStream.
HttpConnection con = (HttpConnection) Connector.open("http://eclipse.ime.usp.br:9090/batalha?op=conecta",Connector.READ_WRITE);
Utilizando da forma a seguir, usando o writeUTF não funciona.
HttpConnection con = (HttpConnection) Connector.open("http://eclipse.ime.usp.br:9090/batalha",Connector.READ_WRITE);
DataOutputStream dataOut = con.openDataOutputStream();
dataOut.writeUTF("op=conecta");
dataOut.flush();
Com writeUTF("?op=conecta") também não e com writeUTF("conecta") também não.
O segundo caso, passando o parâmetro com writeUTF, o retorno no response é "ERRO null" .
Também tive o mesmo problema. Só funcionou quando eu mandei a string "op=conecta" diretamente.
Daí então recebi algo do tipo como um texto ASCII normal:
"OK espera
320
"
Depois disso tentei enviar:
"op=ping
id=320
"
E o servidor respondeu "ERRO null"
Depois tentei enviar (só para desencargo de consciência):
"op=ping&id=320" e funcionou.
Tudo isso eu fiz com o método POST.
Daí então recebi algo do tipo como um texto ASCII normal:
"OK espera
320
"
Depois disso tentei enviar:
"op=ping
id=320
"
E o servidor respondeu "ERRO null"
Depois tentei enviar (só para desencargo de consciência):
"op=ping&id=320" e funcionou.
Tudo isso eu fiz com o método POST.
Através de comandos GET, feitos por um browser, depois de ter enviado o op=conecta e recebido OK joga com o ID, enviei o seguinte:
http://eclipse.ime.usp.br:9090/batalha?op=tabuleiro&id=349&bote=A1&bote=A3&bote=A5&bote=A7&submarino=G1,G2&submarino=E1,E2&submarino=C1,C2&cruzador=E8,E9,E10&cruzador=C8,C9,C10&encouracado=G7,G8,G9,G10&portaavioes=I8,I9,I10,J9
Apareceu o seguinte erro:
http://eclipse.ime.usp.br:9090/batalha?op=tabuleiro&id=349&bote=A1&bote=A3&bote=A5&bote=A7&submarino=G1,G2&submarino=E1,E2&submarino=C1,C2&cruzador=E8,E9,E10&cruzador=C8,C9,C10&encouracado=G7,G8,G9,G10&portaavioes=I8,I9,I10,J9
Apareceu o seguinte erro:
ERRO java.util.Arrays.copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object; Alguém pode imaginar o que possa ser? Parece que a string de op=tabuleiro está certa...
Oi pessoal,
Eu investiguei a questão do POST, parece que fiz besteira na hora de ler os parâmetros. Estou terminando de arrumar isso, já já devo colocar uma nova versão online.
Na nova versão, o uso do GET não será mais permitido.
Paulo, sobre esse último erro ainda não sei o que pode ser, mas todas as exceções estão no log
Depois que eu subir a nova versão do servidor, você testa de novo e vemos no que dá.
Mari - uma coisa de cada vez
Eu investiguei a questão do POST, parece que fiz besteira na hora de ler os parâmetros. Estou terminando de arrumar isso, já já devo colocar uma nova versão online.
Na nova versão, o uso do GET não será mais permitido.
Paulo, sobre esse último erro ainda não sei o que pode ser, mas todas as exceções estão no log
Mari - uma coisa de cada vez
OI Mari,
Uma duvida beeeeeem mais simples
O relatorio que temos que entregar deve conter o que exatamente?
Pelo que esta no enunciado, explicar a interface, como jogar.. teclas usadas..
Ate aqui tranquilo..
Com relacao ao codigo.. o que devemos colocar no relatorio?
Grato,
Uma duvida beeeeeem mais simples
O relatorio que temos que entregar deve conter o que exatamente?
Pelo que esta no enunciado, explicar a interface, como jogar.. teclas usadas..
Ate aqui tranquilo..
Com relacao ao codigo.. o que devemos colocar no relatorio?
Grato,
Com relação ao código...
Expliquem um pouco como ele foi organizado, o que fazem as classes principais, decisões importantes que vocês tomaram, esse tipo de coisa. Não precisa ser nada muito detalhado... só umas "dicas" pra me ajudar a entender o programa de vocês, aí facilita o meu trabalho
Mari
Expliquem um pouco como ele foi organizado, o que fazem as classes principais, decisões importantes que vocês tomaram, esse tipo de coisa. Não precisa ser nada muito detalhado... só umas "dicas" pra me ajudar a entender o programa de vocês, aí facilita o meu trabalho
Mari
O erro do Arrays.copyOfRange foi corrigido também.
Era só problemas com versões diferentes do Java no desenvolvimento e no servidor...
Mari
Era só problemas com versões diferentes do Java no desenvolvimento e no servidor...
Mari
O que quer dizer este erro?
ERRO Nao pode mudar estado sem limpar!
Eu recebi "OK joga" com o ID e depois enviei o tabuleiro, daí apareceu esta mensagem.
Depois eu conectei de novo dois participantes tentei enviar o tabuleiro novamente, e em um dos participantes do jogo o servidor aceitou o tabuleiro, mas no outro ele disse que o participante não existia.
Att..
ERRO Nao pode mudar estado sem limpar!
Eu recebi "OK joga" com o ID e depois enviei o tabuleiro, daí apareceu esta mensagem.
Depois eu conectei de novo dois participantes tentei enviar o tabuleiro novamente, e em um dos participantes do jogo o servidor aceitou o tabuleiro, mas no outro ele disse que o participante não existia.
Att..
Olá,
Estou com o seguinte problema: estou testando a versão conectada rodando dois emuladores no meu computador. Consigo conectar com os dois normalmente, mas na hora de enviar o tabuleiro, apenas um deles consegue enviar. O outro recebe uma mensagem de erro: Jogador não existe. Isso é um problema com meu EP ou com o servidor?
Aproveitando para confirmar: quando o celular pede pelo ataque do adversário e o ataque ainda não foi enviado, a resposta é "OK espera" (como nas outras operações)?
Obrigado!
Estou com o seguinte problema: estou testando a versão conectada rodando dois emuladores no meu computador. Consigo conectar com os dois normalmente, mas na hora de enviar o tabuleiro, apenas um deles consegue enviar. O outro recebe uma mensagem de erro: Jogador não existe. Isso é um problema com meu EP ou com o servidor?
Aproveitando para confirmar: quando o celular pede pelo ataque do adversário e o ataque ainda não foi enviado, a resposta é "OK espera" (como nas outras operações)?
Obrigado!
Foi o mesmo que aconteceu comigo, só que eu testei em dois computadores diferentes...
Estou com o seguinte problema: estou testando a versão conectada rodando dois emuladores no meu computador. Consigo conectar com os dois normalmente, mas na hora de enviar o tabuleiro, apenas um deles consegue enviar. O outro recebe uma mensagem de erro: Jogador não existe. Isso é um problema com meu EP ou com o servidor?
Talvez fosse do servidor, eu corrigi um errinho com relação aos timeouts hoje de manhã. Testem de novo e me contem se deu certo.
Aproveitando para confirmar: quando o celular pede pelo ataque do adversário e o ataque ainda não foi enviado, a resposta é "OK espera" (como nas outras operações)?
Isso.
Talvez fosse do servidor, eu corrigi um errinho com relação aos timeouts hoje de manhã. Testem de novo e me contem se deu certo.
Aproveitando para confirmar: quando o celular pede pelo ataque do adversário e o ataque ainda não foi enviado, a resposta é "OK espera" (como nas outras operações)?
Isso.
Oi Mariana,
Não estou conseguindo enviar o tabuleiro...
Os parâmetros enviados são (por exemplo):
op=tabuleiro
id=204
portaavioes=A1,A2,A3,B2
encouracado=E5,E6,E7,E8
cruzador=E1,E2,E3
cruzador=G1,G2,G3
submarino=B6,B7
submarino=H6,H7
submarino=J5,J6
bote=C4
bote=A5
bote=A8
bote=C8
E recebo esta resposta abaixo:
[ERRO java.util.Arrays.copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;]
Estou com o mesmo problema.
Resolvi usar os testes disponibilizados e aparentemente eles falham também...
Acho que seria bom que esse EP fosse adiado, já que estão ocorrendo diversas dificuldades... Se a entrega for amanhã mesmo tudo vai sair (muito) corrido...
Resolvi usar os testes disponibilizados e aparentemente eles falham também...
Acho que seria bom que esse EP fosse adiado, já que estão ocorrendo diversas dificuldades... Se a entrega for amanhã mesmo tudo vai sair (muito) corrido...
Concordo
Também estou com problemas para rodar os testes de aceitação da Mari.
Alguém conseguiu rodá-los?
Adiar é uma boa, dado que os testes não funcionam...
Alguém conseguiu rodá-los?
Adiar é uma boa, dado que os testes não funcionam...
Boa noite a todos,
ao enviar a mensagem:
op=tabuleiro
id=331
portaavioes=A1,A2,A3,B2
encouracado=A10,B10,C10,D10
cruzador=J1,J2,J3
cruzador=J8,J9,J10
submarino=E2,E3
submarino=E7,E8
submarino=G5,G6
bote=B6
bote=G2
bote=G9
bote=I5
recebo
ERRO java.util.Arrays.copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;
]
voces estao passando por isto também?? eu tb acho complicado entregar amanha, pois nao conseguimos validar o acesso remoto assim =((
ao enviar a mensagem:
op=tabuleiro
id=331
portaavioes=A1,A2,A3,B2
encouracado=A10,B10,C10,D10
cruzador=J1,J2,J3
cruzador=J8,J9,J10
submarino=E2,E3
submarino=E7,E8
submarino=G5,G6
bote=B6
bote=G2
bote=G9
bote=I5
recebo
ERRO java.util.Arrays.copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;
]
voces estao passando por isto também?? eu tb acho complicado entregar amanha, pois nao conseguimos validar o acesso remoto assim =((
Passo pelo mesmo problema...
Tb acho complicado entregar amanha...
Parece que agora está funcionando, não sei o porquê... Dêem uma testada... da primeira vez que testei funcionou e da segunda deu um "ERRO Nao pode mudar estado sem limpar!" que eu não sei o que significa
a mesma coisa acontece comigoo =(
entao estou fazendo testes com o Tales, e parece q o primeiro q conecta consegue enviar o tabuleiro, já o segundo recebe aquele erro ao tentar enviar o tabuleiro. O primeiro entao fica aguardando e enviando pings infinitamente =( alguem teve resultado diferente?
Também recebo "ERRO Nao pode mudar estado sem limpar!" agora...
Erro "ERRO java.util.Arrays.copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object" corrigido.
Tirei a mensagem "ERRO Nao pode mudar estado sem limpar!" que não fazia sentido, tentei corrigir o problema mas não sei se foi. Testem por favor.
Sobre adiar o EP... eu não gostaria de fazer isso. Acho que vocês estão tão cansados desse EP quanto eu... :P Vamos ver como as coisas correm amanhã, aí eu considero dar um dia a mais... Mas não prometo!
Mari
Tirei a mensagem "ERRO Nao pode mudar estado sem limpar!" que não fazia sentido, tentei corrigir o problema mas não sei se foi. Testem por favor.
Sobre adiar o EP... eu não gostaria de fazer isso. Acho que vocês estão tão cansados desse EP quanto eu... :P Vamos ver como as coisas correm amanhã, aí eu considero dar um dia a mais... Mas não prometo!
Mari
Marii, esta funcionando sim =)) agora deu outra erro mais parece ser da minha aplicacao se algo mais acontecer posto aki =)) obrigado
Agora está funcionando, sim, mas parece que ainda tem um problema com o protocolo:
O porta-aviões é identificado como "portaavioes" (como no enunciado) ou "porta-aviões"? Estou utilizando "portaavioes" e não dá erro para enviar o tabuleiro, mas na hora que afundo um porta-aviões, recebe "porta-avião".
O porta-aviões é identificado como "portaavioes" (como no enunciado) ou "porta-aviões"? Estou utilizando "portaavioes" e não dá erro para enviar o tabuleiro, mas na hora que afundo um porta-aviões, recebe "porta-avião".
Acho que tem outro erro: mandei de um jeito errado a posição do meu tiro e a resposta do servidor foi "Faltou posicao da jogada", mas a mensagem não começa nem com "ERRO " nem com "ABORTA " e causou problemas na execução.
Mariana, existe a possibilidade de adiar o EP p/ amanhã?
Luiz,
Para mandar o tabuleiro é 'portaavioes' mesmo, como no enunciado. Quando afunda recebe "porta-avião"? Que feio, não deveria :P Vou corrigir, vou mandar 'potaavioes' também.
Danielle,
Esse do "Faltou a posição" deveria vir com a palavra "ERRO" na frente sim. Vou corrigir também, em no máximo meia hora coloco a nova versão no ar.
Sobre adiar, vejam na outra thread.
Mari
Para mandar o tabuleiro é 'portaavioes' mesmo, como no enunciado. Quando afunda recebe "porta-avião"? Que feio, não deveria :P Vou corrigir, vou mandar 'potaavioes' também.
Danielle,
Esse do "Faltou a posição" deveria vir com a palavra "ERRO" na frente sim. Vou corrigir também, em no máximo meia hora coloco a nova versão no ar.
Sobre adiar, vejam na outra thread.
Mari
Outra "reclamação" 
Ontem estava testando e ao enviar o tabuleiro, ou vinha 1 resposta ("OK espera"), ou vinham 2 respostas ("OK joga" seguida de "comeca" ou "espera").
Hoje só vem 1: comeca ou espera.
No caso do inicio do jogo serão 1 ou 2 respostas?
Ontem estava testando e ao enviar o tabuleiro, ou vinha 1 resposta ("OK espera"), ou vinham 2 respostas ("OK joga" seguida de "comeca" ou "espera").
Hoje só vem 1: comeca ou espera.
No caso do inicio do jogo serão 1 ou 2 respostas?
Mari, apos realizar uma jogada de ataque, o jogador deve enviar uma msg de op=recebe, mas ao realizar esta operacao recebo OK espera, que não esta descrito no protocolo, e ao enviar o segundo ping, volta msg de erro. Abaixo seguem os pacotes enviados
PlayerA - 27742 ----> sending: [op=recebe id=109]
PlayerA - 27863 ----> received: [OK espera]
PlayerB - 31426 ----> sending: [op=recebe id=110]
PlayerB - 31952 ----> received: [OK continua posicao=D4]
PlayerA - 32865 ----> sending: [op=ping id=109]
PlayerA - 33112 ----> received: [ERRO Mensagem inesperada: ping]
alguem mais teve este problema?
PlayerA - 27742 ----> sending: [op=recebe id=109]
PlayerA - 27863 ----> received: [OK espera]
PlayerB - 31426 ----> sending: [op=recebe id=110]
PlayerB - 31952 ----> received: [OK continua posicao=D4]
PlayerA - 32865 ----> sending: [op=ping id=109]
PlayerA - 33112 ----> received: [ERRO Mensagem inesperada: ping]
alguem mais teve este problema?
Rodrigo, quando você estiver esperando pela jogada do outro jogador, o ping deve ser com "op=recebe" e não com "op=ping".
obrigado Danielle =)) testei aki e funcionou
Mesmo se for incompleto, eu prefereria... Se tiver como...
Eu estarei apto a começar a fazer os testes no modo Conectado neste sábado depois do almoço, pois vou acabar o modo local hoje a noite.
Por mim não precisa postar o incompleto antes de sábado de tarde, mas depois poderia ser interessante o incompleto e depois versões intermediárias com a lista dos comandos que já estão funcionando (para não gerar transtornos e/ou dúvidas para ninguém).
Obrigado.
Por mim não precisa postar o incompleto antes de sábado de tarde, mas depois poderia ser interessante o incompleto e depois versões intermediárias com a lista dos comandos que já estão funcionando (para não gerar transtornos e/ou dúvidas para ninguém).
Obrigado.
Boa noite,
alguem teve essa exception??
javax.microedition.io.ConnectionNotFoundException: TCP open
tentei criar uma unica Connection para todos os requests, nao obtive sucesso, alguem conseguiu?? pq pelo q parece acabaram os sockets =( isso so acontece apos diversas rodadas de um jogo remoto.
alguem teve essa exception??
javax.microedition.io.ConnectionNotFoundException: TCP open
tentei criar uma unica Connection para todos os requests, nao obtive sucesso, alguem conseguiu?? pq pelo q parece acabaram os sockets =( isso so acontece apos diversas rodadas de um jogo remoto.
Eu tive esse erro mas quando executei dentro da empresa que trabalho. No caso, era problema de restrição de segurança na empresa que não permitia o acesso a url do servidor do EP.
Eu tbm tive esse problema, parece queda de conexao. Tive até quando o programa havia acabao de conectar e iniciar o jogo conectado, e também depois de enviar 1 ou 2 jogadas...
consegui resolver aki com um truque sujoo, de tentar pegar uma HttpConnection se nao der, espera um pouco e tenta denovo =)