Boa noite!
Tive dúvida até no título do post. Vou tentar explicar meu problema e uma solução que pensei.
O drsmachado já me ajudou muito no meu último post. Ele recomendou que eu fizesse através de JMS o recebimento das mensagens para serem persistidas. Assim eu fiz e funcionou perfeitamente. (Obrigado drsmachado!)
Agora tenho uma outra dúvida, como enviar uma mensagem através do TCP somente quando um botão for acionado, em outro programa.
Eu pensei no seguinte:
Quando a pessoa acionar determinado botão ele vai gravar no banco de dados a mensagem para ser enviada (É uma mensagem pré-configurada), e dentro do meu do...while() fazer uma conexão com o banco, consultar pra ver se tem alguma mensagem para o destinatário e se houver envia-la. Só que para cada mensagem recebida (Serão muitas de vários dispositivos), o programa teria q abrir uma consulta no banco de dados, consultar, retornar e só se houvesse ele enviaria, após isso ele iria alterar uma flag no BD informando que ela já foi enviada. Alguém consegue pensar em um método mais prático?
Segue meu método run() para tentar visualizar melhor.
Cada thread é aberta quando for feita uma conexão TCP:@Override
public void run() {
BufferedInputStream in;
OutputStream out;
try {
in = new BufferedInputStream(conexao.getInputStream());
out = conexao.getOutputStream();
System.out.println("Conexão aberta com "+conexao.getInetAddress());
// Criar a sessão JMS
Session session = connection.createSession(transacted, Session.AUTO_ACKNOWLEDGE);
queueMensagem = session.createQueue("Mensagem");
// Criar o produtor JMS
MessageProducer producer = session.createProducer(queueMensagem);
// Enquanto conexão TCP estiver ativa, faça:
do{
//Recebo a mensagem através do in.read()
System.out.println("Recebido");
//ENVIAR AQUI UMA MENSAGEM DE VOLTA ATRAVÉS DO OUT.WRITE()
//QUANDO UM BOTÃO FOR ACIONADO EM OUTRO PROGRAMA
TextMessage mensagem = session.createTextMessage(recebido.toString());
producer.send(mensagem);
}while(conexao.isConnected());
session.close();
connection.close();
in.close();
out.close();
conexao.close();
}
}
Desculpe se não fui claro! Mas eu achei muito difícil de explicar
