Comunicação remota

Comunicação remota

by Luiz Fernando O C Real -
Number of replies: 44
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!
In reply to Luiz Fernando O C Real

Re: Comunicação remota

by Mariana Bravo -
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
In reply to Mariana Bravo

Re: Comunicação remota

by Luiz Fernando O C Real -
Oi, Mari.

Não precisa colocar incompleto, não. A gente espera, afinal o nosso EP também não está completo. smile

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)?
In reply to Luiz Fernando O C Real

Re: Comunicação remota

by Mariana Bravo -
"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. smile


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?
In reply to Mariana Bravo

Re: Comunicação remota

by Luiz Fernando O C Real -
Mais ou menos... Ainda não entendi qual o protocolo para fazer esse polling... Tem alguma mensagem específica para isso?
In reply to Luiz Fernando O C Real

Re: Comunicação remota

by Mariana Bravo -
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

In reply to Mariana Bravo

Re: Comunicação remota

by Paulo Siécola -
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!
In reply to Paulo Siécola

Re: Comunicação remota

by Mariana Bravo -
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
In reply to Mariana Bravo

Re: Comunicação remota

by Rogério Rondini -
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" .
In reply to Rogério Rondini

Re: Comunicação remota

by Paulo Siécola -
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.
In reply to Paulo Siécola

Re: Comunicação remota

by Paulo Siécola -
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:

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...

In reply to Paulo Siécola

Re: Comunicação remota

by Mariana Bravo -
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 smile 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 smile
In reply to Mariana Bravo

Re: Comunicação remota

by Thadeu Russo -
OI Mari,

Uma duvida beeeeeem mais simples smile

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,
In reply to Thadeu Russo

Re: Comunicação remota

by Mariana Bravo -
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 big grin

Mari

In reply to Paulo Siécola

Re: Comunicação remota

by Mariana Bravo -
O erro do Arrays.copyOfRange foi corrigido também.

Era só problemas com versões diferentes do Java no desenvolvimento e no servidor...

Mari
In reply to Mariana Bravo

Re: Comunicação remota

by Paulo Siécola -
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..
In reply to Mariana Bravo

Re: Comunicação remota

by Luiz Fernando O C Real -
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!
In reply to Luiz Fernando O C Real

Re: Comunicação remota

by Paulo Siécola -
Foi o mesmo que aconteceu comigo, só que eu testei em dois computadores diferentes...
In reply to Luiz Fernando O C Real

Re: Comunicação remota

by Mariana Bravo -
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.
In reply to Mariana Bravo

Re: Comunicação remota

by Gustavo Ansaldi Oliva -

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;]

In reply to Gustavo Ansaldi Oliva

Re: Comunicação remota

by Marcio Masaki Tomiyoshi -
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...
In reply to Marcio Masaki Tomiyoshi

Re: Comunicação remota

by Leonardo Ka Wah Hing -
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...
In reply to Leonardo Ka Wah Hing

Re: Comunicação remota

by Rodrigo Constantin Zaccara -
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 =((
In reply to Rodrigo Constantin Zaccara

Re: Comunicação remota

by Gustavo Ansaldi Oliva -

Passo pelo mesmo problema...

Tb acho complicado entregar amanha...

In reply to Gustavo Ansaldi Oliva

Re: Comunicação remota

by Marcio Masaki Tomiyoshi -
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 smile
In reply to Marcio Masaki Tomiyoshi

Re: Comunicação remota

by Rodrigo Constantin Zaccara -
a mesma coisa acontece comigoo =(
In reply to Rodrigo Constantin Zaccara

Re: Comunicação remota

by Rodrigo Constantin Zaccara -
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?
In reply to Rodrigo Constantin Zaccara

Re: Comunicação remota

by Gustavo Ansaldi Oliva -
Também recebo "ERRO Nao pode mudar estado sem limpar!"  agora...
In reply to Gustavo Ansaldi Oliva

Re: Comunicação remota

by Mariana Bravo -
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
In reply to Mariana Bravo

Re: Comunicação remota

by Rodrigo Constantin Zaccara -
Marii, esta funcionando sim =)) agora deu outra erro mais parece ser da minha aplicacao se algo mais acontecer posto aki =)) obrigado
In reply to Mariana Bravo

Re: Comunicação remota

by Luiz Fernando O C Real -
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".
In reply to Luiz Fernando O C Real

Re: Comunicação remota

by Danielle Tiemy Paulo Miazaki -
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.
In reply to Mariana Bravo

Re: Comunicação remota

by Gustavo Ansaldi Oliva -
Mariana, existe a possibilidade de adiar o EP p/ amanhã?
In reply to Gustavo Ansaldi Oliva

Re: Comunicação remota

by Mariana Bravo -
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
In reply to Mariana Bravo

Re: Comunicação remota

by Tales Pinheiro de Andrade -
Outra "reclamação" tongueout

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?
In reply to Mariana Bravo

Re: Comunicação remota

by Rodrigo Constantin Zaccara -
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?
In reply to Mariana Bravo

Re: Comunicação remota

by Paulo Siécola -
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.
In reply to Luiz Fernando O C Real

Re: Comunicação remota

by Rodrigo Constantin Zaccara -
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.
In reply to Rodrigo Constantin Zaccara

Re: Comunicação remota

by Rogério Rondini -
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.
In reply to Rodrigo Constantin Zaccara

Re: Comunicação remota

by Tales Pinheiro de Andrade -
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...
In reply to Rodrigo Constantin Zaccara

Re: Comunicação remota

by Rodrigo Constantin Zaccara -
consegui resolver aki com um truque sujoo, de tentar pegar uma HttpConnection se nao der, espera um pouco e tenta denovo =)