Subpage under development, new version coming soon!
Subject: Programação
pelo menos dormi até tarde hoje, não ia trabalhar mesmo... hehehe
ok.. vlw muito pela ajuda
to tentando colocar nick mas ta foda... e os clientes nao tão interagindo
to tentando colocar nick mas ta foda... e os clientes nao tão interagindo
vais ter que criar um objeto usuario e uma lista de usuarios no servidor alto nível. esta lista tem que conter a thread que acessa o usuário tambem (na verdade o objeto é uma dupla <usuario,thread>) ... cada thread receberá um usuário específico e vai precisar ter operações de sincronizaçao com o servidor (pois é a thread quem vai receber a requisição de mudança de nick, por exemplo).
interessante, quando tiver um tempinho vou adicionar isso no meu codigo :)
interessante, quando tiver um tempinho vou adicionar isso no meu codigo :)
traduzindo...
ahuahuaha :~~
vou desistir desse curso.. num entendo nada ;~~
ahuahuaha :~~
vou desistir desse curso.. num entendo nada ;~~
que nada, vc tá bem melhor do que eu nesta altura do curso.
traduzindo: vai ser necessario criar um Usuario.java contendo atributos de usuario como:
int ID;
String nick;
alem disso, vai ser necessario criar uma classe interna em servidor tipo TuplaUserThread com:
Usuario usuario;
Thread instancia;
em Servidor.java vai ser necessario ter um "List tuplas." (pode ser ArrayList<TuplaUser>) com todos os usuarios conectados no servidor e suas threads... e um updateListaTuplas(Usuario usuario) publico... tu vai ter que implementar uma busca na lista
cada ThreadConexao vai receber um Usuario. cada TuplaUserThread vai ter um construtor que atribui "instancia", uma referencia para a Thread. Isso vai ser passado pelo Servidor quando alguem conectar. Tipo assim: em Servidor vai ter algo como tuplas.add(new Usuario(),new ThreadConexao(...)); logo depois de socket.accept().
alem disso, precia adicionar a mensagem associada a mudança de nick (por exemplo "/nick") em ThreadConexao. Logo depois do lugar onde as mensagens são interpretadas (procura por "Exit" depois de in.readline(), acho)... esta chamada vai: 1- mudar o nick do usuario local, 2- chamar o método parent.updateListaTuplas, passando o usuario local modificado como parametro.
além disso acho que tu vai ter que fazer uma mensagem tipo NICK_OK, e o servidor vai enviar esta mensagem para o usuario depois que tudo acima aconteceu... ai o cliente vai mudar o nick do cara no frame, por exemplo.
isso para uma simples mudança de nick... tem um bocado de trabalho pela frente, companheiro :)
traduzindo: vai ser necessario criar um Usuario.java contendo atributos de usuario como:
int ID;
String nick;
alem disso, vai ser necessario criar uma classe interna em servidor tipo TuplaUserThread com:
Usuario usuario;
Thread instancia;
em Servidor.java vai ser necessario ter um "List tuplas." (pode ser ArrayList<TuplaUser>) com todos os usuarios conectados no servidor e suas threads... e um updateListaTuplas(Usuario usuario) publico... tu vai ter que implementar uma busca na lista
cada ThreadConexao vai receber um Usuario. cada TuplaUserThread vai ter um construtor que atribui "instancia", uma referencia para a Thread. Isso vai ser passado pelo Servidor quando alguem conectar. Tipo assim: em Servidor vai ter algo como tuplas.add(new Usuario(),new ThreadConexao(...)); logo depois de socket.accept().
alem disso, precia adicionar a mensagem associada a mudança de nick (por exemplo "/nick") em ThreadConexao. Logo depois do lugar onde as mensagens são interpretadas (procura por "Exit" depois de in.readline(), acho)... esta chamada vai: 1- mudar o nick do usuario local, 2- chamar o método parent.updateListaTuplas, passando o usuario local modificado como parametro.
além disso acho que tu vai ter que fazer uma mensagem tipo NICK_OK, e o servidor vai enviar esta mensagem para o usuario depois que tudo acima aconteceu... ai o cliente vai mudar o nick do cara no frame, por exemplo.
isso para uma simples mudança de nick... tem um bocado de trabalho pela frente, companheiro :)
o nick_ok é pra garantir algumas coisas do tipo: usuario não coloca nick inválido ou não coloca nick duplicado, etc...
que nada, vc tá bem melhor do que eu nesta altura do curso.
ia falar a mesmissima coisa ....
ia falar a mesmissima coisa ....
ahh agora comecei a entender...
macho como nao vai dar tempo eu queria soh colocar o nick mesmo sem nenhuma restrição
tenho q criar Usuario.java, TuplaUserThread mesmo assim?
e isso aqui, antes tava acontecendo(esquece oq ta em itálico) aí tu mudou e eu não sei mais como fazer, tipo, antes quando eu escrevia, todos os clientes viam a msg, agora quando eu escrevo nao ve mais
• Cliente deverá implementar interface gráfica que permita a exibição das mensagens recebidas, o envio de mensagens para todos os clientes (broadcast) ou para um cliente em particular
macho como nao vai dar tempo eu queria soh colocar o nick mesmo sem nenhuma restrição
tenho q criar Usuario.java, TuplaUserThread mesmo assim?
e isso aqui, antes tava acontecendo(esquece oq ta em itálico) aí tu mudou e eu não sei mais como fazer, tipo, antes quando eu escrevia, todos os clientes viam a msg, agora quando eu escrevo nao ve mais
• Cliente deverá implementar interface gráfica que permita a exibição das mensagens recebidas, o envio de mensagens para todos os clientes (broadcast) ou para um cliente em particular
assim, se você quiser que o nick de um cliente seja visto pelos outros clientes, você vai precisar da lista de nicks (pelo menos, se tu não quiser implementar usuario.java) e da lista de threads... a forma mais facil de validar é criar esta classe que contenha a dupla e fazer uma lista das classes...
pra broadcast, tu vai precisar acessar a lista de threads Servidor.java... uma implementação possível é da seguinte forma:
1) antes de mais nada, uma palavra do protocolo tipo "/broadcast" (o cliente digita: "/broadcast <mensagem>")
2) uma função em ThreadConexao.java do tipo enviaBroadcast(String msg) que:
2.1 - recebe a msg do while
2.2 - acessa uma função em Servidor.java que repassa o broadcast tipo "parent.enviaBroadcast(this, msg);"
3) uma função em ThreadConexao.java que informa a instância de PrintWriter out, pois o servidor vai precisar imprimir a mensagem para cada uma das threads... tipo "public PrintWriter getPrintWriterOut() { return this.out; }"
4) a função enviabroadcast(Thread t, String msg) em Servidor.java, que:
4.1 percorre a lista de Threads e envia a mensagem para cada um das threads (tipo t.getPrintWriterOut().println(msg))
para um cliente em particular, a logica é muito parecida. a diferença é que só envia o println para a thread do usuario (ai precisa da Tupla mesmo, nao tem jeito...)
pra broadcast, tu vai precisar acessar a lista de threads Servidor.java... uma implementação possível é da seguinte forma:
1) antes de mais nada, uma palavra do protocolo tipo "/broadcast" (o cliente digita: "/broadcast <mensagem>")
2) uma função em ThreadConexao.java do tipo enviaBroadcast(String msg) que:
2.1 - recebe a msg do while
2.2 - acessa uma função em Servidor.java que repassa o broadcast tipo "parent.enviaBroadcast(this, msg);"
3) uma função em ThreadConexao.java que informa a instância de PrintWriter out, pois o servidor vai precisar imprimir a mensagem para cada uma das threads... tipo "public PrintWriter getPrintWriterOut() { return this.out; }"
4) a função enviabroadcast(Thread t, String msg) em Servidor.java, que:
4.1 percorre a lista de Threads e envia a mensagem para cada um das threads (tipo t.getPrintWriterOut().println(msg))
para um cliente em particular, a logica é muito parecida. a diferença é que só envia o println para a thread do usuario (ai precisa da Tupla mesmo, nao tem jeito...)
Quando estiver em Campina Grande vai me dar uma aulinha de programação neh?
\o/
\o/
rac2 é um fi duma mãe
se garante d+
o problema eh q eu nao consigo entender a linguagem dele! :P
ahsuahs
se garante d+
o problema eh q eu nao consigo entender a linguagem dele! :P
ahsuahs
um pouco, pq tem coisas ai q eu nunca vi, eu nao sei aonde implementar...
o jeito mais facil deu entender é q nem tu fez daquela vez, implementou o código e do lado de cada passo vc colocava
// comentários
ali sim eu entendia tudim! :D
(edited)
o jeito mais facil deu entender é q nem tu fez daquela vez, implementou o código e do lado de cada passo vc colocava
// comentários
ali sim eu entendia tudim! :D
(edited)