When typed /msg nome mensagem
should send this message to nome
, but he will send it to whoever typed
Manager.java
private Socket cliente;
public static String nomeCliente;
private static BufferedReader leitor;
private static PrintWriter escritor;
private static final HashMap<String, Gerenciador> clientes = new HashMap<String, Gerenciador>();
public Gerenciador(Socket cliente)
{
this.cliente = cliente;
start();
}
public void run()
{
try
{
leitor = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
escritor = new PrintWriter(cliente.getOutputStream(), true);
escritor.println("Qual seu nome ??");
String mensagem = leitor.readLine();
nomeCliente = mensagem;
clientes.put(this.nomeCliente, this);
clientes.get(nomeCliente).getEscritor().println("Bem vindo ao ChatP2P " + nomeCliente);
while(true)
{
mensagem = leitor.readLine();
mensagem.replaceAll("\s+"," ");
if(mensagem.startsWith("/"))
{
String[] args = getComandos(mensagem.replace("/", ""));
if(args.length == 3)
{
String arg1 = args[0];
String arg2 = args[1];
String arg3 = args[2];
if(arg1.equalsIgnoreCase("msg"))
{
if(clientes.get(arg2) != null)
{
clientes.get(arg2).getEscritor().println(nomeCliente + ": " + arg3);
/*chatAtual.put(arg2, clientes.get(nomeCliente));
chatAtual.put(nomeCliente, clientes.get(arg2));
clientes.get(nomeCliente).getEscritor().println("Você iniciou um CHAT com " + arg2);
clientes.get(arg2).getEscritor().println(nomeCliente + " iniciou um CHAT com você");*/
}
else
{
clientes.get(nomeCliente).getEscritor().println(arg2 + " não existe");
}
}
}
}
}
}
catch(IOException e)
{
System.err.println("O cliente fechou a conexão terminada");
e.printStackTrace();
}
}
private static String[] getComandos(String mensagem)
{
mensagem.replace("/", "");
return mensagem.split(" ");
}
public PrintWriter getEscritor()
{
return escritor;
}
public String getNomeCliente() {
return nomeCliente;
}
public BufferedReader getLeitor()
{
return leitor;
}
Server.java
public static void main(String[] args)
{
ServerSocket servidor = null;
try
{
servidor = new ServerSocket(9999);
System.out.println("Servidor iniciou");
while(true)
{
Socket cliente = servidor.accept();
System.out.println("Um novo CLIENTE se conectou ao servidor");
new Gerenciador(cliente);
}
}
catch (IOException e)
{
System.err.println("A porta não esta disponivel");
try
{
if(servidor != null)
{
servidor.close();
}
}
catch (IOException e1)
{
e1.printStackTrace();
}
e.printStackTrace();
}
}
Client.java
public static void main(String[] args)
{
try
{
@SuppressWarnings("resource")
final Socket cliente = new Socket("127.0.0.1", 9999);
new Thread()
{
public void run()
{
try
{
BufferedReader leitor = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
while(true)
{
String mensagem = leitor.readLine();
System.out.println(mensagem);
}
}
catch (IOException e)
{
System.err.println("Impossivel ler a mensagem do servidor");
e.printStackTrace();
System.exit(0);
}
}
}.start();
PrintWriter escritor = new PrintWriter(cliente.getOutputStream(), true);
BufferedReader leitorTerminal = new BufferedReader(new InputStreamReader(System.in));
String mensagemTerminal = "";
while((mensagemTerminal = leitorTerminal.readLine()) != null)
{
escritor.println(mensagemTerminal);
if(mensagemTerminal.equalsIgnoreCase("/sair"))
{
System.exit(0);
}
}
}
catch (UnknownHostException e)
{
System.err.println("O endereço é invalido");
e.printStackTrace();
}
catch (IOException e)
{
System.err.println("O servidor esta fora do ar");
e.printStackTrace();
}
}