Hola a todos. Soy novato en Java y estoy haciendo un chat con middleware JSDT para una práctiva para la uni. Pero hay algunos procedimientos que no se donde colocarlos. Lo que tengo por ahora, lo único que hace es mostrar el nombre de quién se conecta y escribir directamente el mensaje de "Hola".
El código que tengo es éste:
package conexion;
import com.sun.media.jsdt.*;
import java.io.*;
public class ConectaAplicacion {
private ConectaCliente client;
private Session session =null;
private Channel channel;
private ConectaConsumidor cConsumer;
private boolean connected = false;
public ConectaAplicacion (String name){
conecta(name);
enviaDatos("Hola");
while (true) {
}
}
private void enviaDatos (String message){
if (connected){
try
{
Data data = new Data(message);
data.setPriority(Channel.HIGH_PRIORITY);
channel.sendToAll(client, data);
}
catch (Exception cexcp)
{
System.out.println("Excepción enviando datos ");
disconnect();
}
}
}
private void conecta(String name){
if (name == null)
throw new Error("ChatUser: connect - Need a non-null name to connect");
client = new ConectaCliente(name);
try
{
URLString url = URLString.createSessionURL(ConectaParametros.HOST_NAME,
ConectaParametros.HOST_PORT, ConectaParametros.SESSION_TYPE,
ConectaParametros.SESSION_NAME);
System.out.println("ConectaAplicacion: connect - Checking URL: " + url);
boolean sessionExists = false;
//intenta conectar
while (!sessionExists)
{
try
{
if (SessionFactory.sessionExists(url))
{
System.out.println("ConectaAplicacion: connect - Found session");
sessionExists = true; }
}
catch (NoRegistryException nrexcp)
{
System.out.println("ConectaAplicacion: connect - No registry (sleeping)");
Thread.sleep(1000);
}
catch (ConnectionException cexcp)
{
System.out.println("ConectaAplicacion: connect - Connection exception (sleeping)");
Thread.sleep(1000);
}
}
/* Crear la sesion de comunicacion */
session = SessionFactory.createSession(client, url, true);
/* Crear el canal de comunicacion */
channel = session.createChannel(client, ConectaParametros.CHANNEL_NAME, true, true, true);
/* Crear el consumidor del canal */
cConsumer = new ConectaConsumidor(name);
channel.addConsumer(client, cConsumer);
connected = true;
}
catch (Exception ex){
ex.printStackTrace();
}
}
private void disconnect(){
if (connected == false)
return;
//antes de borrar la session se deben borrar todos los listener.
try
{
channel.removeConsumer(client, cConsumer);
session.close(true);
}
catch (Exception excp)
{
System.err.println("ChatUser: disconnect - Exception: " + excp.getMessage());
excp.printStackTrace();
}
connected = false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Aplicación para mostrar los pasos de conexión");
InputStreamReader ir = new InputStreamReader (System.in);
BufferedReader br = new BufferedReader (ir);
System.out.print("Introduce nombre de usuario cliente: ");
try {
String name = br.readLine();
new ConectaAplicacion (name);
System.out.println(name);
}catch (Exception e){
e.printStackTrace();
}
}
}
Tengo que añadirle que me liste todos los clientes con
listclientnames pero no sé ni dónde ni cómo ponerlo, solo que he probado mil maneras y ninguna me funciona.
Otro procedimiento es mostrar un mensaje de información de cuando se conecta un usuario.
Mostrar mensajes que recibe el usuario, (indicando cuando el mensaje es global o privado).
Y por último enviar mensajes a todos los usuarios así como enviar mensajes privados a uno de dichos usuarios.
Os agradecería vuestra ayuda y perdón por las molestias.
Un saludo.