Oi pessoal estou fazendo um messenger.
Gostaria de uma ajuda do pessoal experiente aqui para ver o que vai faltando e eu vou implementando o que falta.
Já rascunhei algumas coisas o esquema que preciso fazer é um servidor que deve ter os usuários cadastrados e quando um cliente se conectar a esse servidor trazer a lista de amigos com status on e off line.
Bom vamos lá.
public class ServerTeste {
ArrayList clienteOutPutStream;
public class Manipulador implements Runnable{
BufferedReader reader;
Socket socket;
public Manipulador(Socket clienteSocket){
try {
socket = clienteSocket;
InputStreamReader isReader = new InputStreamReader(socket.getInputStream());
reader = new BufferedReader(isReader);
} catch (Exception e) {
e.printStackTrace();
}
}
public void run(){
String menssagem;
try {
while ((menssagem = reader.readLine()) != null) {
//System.out.println("escrevendo" + menssagem);
mensagemTodos(menssagem);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main (String[] args){
new ServerTeste().mandar();
}
public void mandar(){
clienteOutPutStream = new ArrayList();
try {
ServerSocket serverSocket = new ServerSocket(5000);
while (true) {
Socket clienteSocket = serverSocket.accept();
PrintWriter writer = new PrintWriter(clienteSocket.getOutputStream());
clienteOutPutStream.add(writer);
Thread thread = new Thread(new Manipulador(clienteSocket));
thread.start();
System.out.println("conectado!!!!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void mensagemTodos(String menssagem){
Iterator it = clienteOutPutStream.iterator();
while (it.hasNext()) {
try {
PrintWriter writer = (PrintWriter) it.next();
writer.println(menssagem);
writer.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public class ClienteTeste {
JTextField texSaida;
JTextArea texEntrada;
PrintWriter writer;
BufferedReader reader;
Socket socket;
public static void main(String[] args){
ClienteTeste testa = new ClienteTeste();
testa.mandar();
}
public void mandar(){
JFrame frame = new JFrame("Mensagens");
JPanel mainPanel = new JPanel();
texEntrada = new JTextArea(15,50);
texEntrada.setLineWrap(true);
texEntrada.setWrapStyleWord(true);
texEntrada.setEditable(false);
JScrollPane scroller = new JScrollPane(texEntrada);
texSaida = new JTextField(20);
JButton buttonEnviar = new JButton("Enviar");
buttonEnviar.addActionListener(new ButtonEnviarListener());
mainPanel.add(scroller);
mainPanel.add(texSaida);
mainPanel.add(buttonEnviar);
setSobeRede();
Thread readerThread = new Thread(new LeitorEntrada());
frame.getContentPane().add(BorderLayout.CENTER, mainPanel);
frame.setSize(400,500);
frame.setVisible(true);
}
private void setSobeRede(){
try {
socket = new Socket("127.0.0.1",5000);
InputStreamReader streamReader = new InputStreamReader(socket.getInputStream());
reader = new BufferedReader(streamReader);
writer = new PrintWriter(socket.getOutputStream());
System.out.println("conexao estabelecida!!!");
} catch (Exception e) {
e.printStackTrace();
}
}
public class ButtonEnviarListener implements ActionListener{
public void actionPerformed(ActionEvent event){
try {
writer.println(texSaida.getText());
writer.flush();
} catch (Exception e) {
e.printStackTrace();
}
texSaida.setText("");
texSaida.requestFocus();
}
}
public class LeitorEntrada implements Runnable{
public void run(){
String menssagem;
try {
while((menssagem = reader.readLine()) != null){
//System.out.println("escrevendo" + menssagem);
texEntrada.append(menssagem + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Minhas dúvidas são como posso fazer para aparecer os contatos online e offline e também como posso fazer para enviar a mensagem para o contato e nao para todos?
Obrigado!!