Mensagem que aparece um tempo e saí
import waba.ui.MessageBox;
public class Mensagem extends MessageBox
{
public Mensagem(String titulo, String msg)
{
super(titulo,msg,null);
this.setUnpopDelay(3000);
}
}
Writebytes serial
Pessoal, Estou tentando sincronizar minha aplicação SuperWaba com minha aplicação Servidor em Java utilizando sockets e estou tendo problemas em receber e enviar mensagens com uma unica conexão. A minha aplicação servidor esta funcionando perfeitamente, fiz uma aplicação cliente em Java para simular a comunicação, e tudo funciona perfeitamente com apenas uma conexão. Mas o meu cliente SuperWaba, após o envio de informações para o servidor, só é possivel receber as informações de resposta se ambos (Servidor e cliente) fecharem e abrirem novamente a conexão, ou seja, somente o envio ou recebimento de mensagem é realizado em uma conexão.
Alguem sabe informar se isso é uma caracteristica do Superwaba, dos dispositivos móveis, ou problema de Bios? Há alguma forma de realizar a sincronia de Leitura/Escrita realizando somente uma unica conexão Socket?
Segue um resumo do código que estou utilizando no superwaba e que não funciona a menos que se reabra a conexão após o trexo de recebimento de informações (um código similar foi feito em java para simular e obteve sucesso):
try {
skt = new Socket(server_ip, server_port);
if (skt.isOpen()) {
//ENVIANDO INFORMAÇÕES
String mensagemOut = "Me mande os registros";
//Mensagem enviada
byte [] bufOut = mensagemOut.getBytes();
if (skt.writeBytes(bufOut, 0, bufOut.length) !=
bufOut.length) {
<ERRO>
}
// so funciona se a conexão for reaberta neste ponto. O problema é que o servidor só retorna informações após o pedido, fechando a conexão ele perde o pedido da sessão.
//RECEBENDO INFORMAÇÕES
int bytesReady = 0;
int bytesReceived = 0;
byte[] buffer = new byte[1000];
try {
bytesReceived = skt.readBytes(buffer,bytesReady,1000-bytesReady);
} catch (Exception e) {
<ERRO>
}
if (bytesReceived > 0) {
mensagemIn = new String(buffer).trim(); //Mensagem
recebida
}
}
} catch (Exception e) {
return;
}
//FIM
mensagemIn retorna vazia se a conexão não for reaberta
------------------
enviar bytes para serial
você tem que fazer o seguinte:
Primeiro para passar os arquivos para o array, vc tem que fazer
Array[0] = (0x16 & 0xFF);
Array[1] = (0x4E & 0xFF);
Array[2] = (0xAA & 0xFF);
Array[3] = (0x81 & 0xFF);
Array[4] = (0xBC & 0xFF);
Array[5] = (0x43 & 0xFF);
Por que?
1 0x"valor", é preciso usar o 0x antes do valor para que o mesmo seja identificado como hexa.
Segui
2 Você tem que fazer um And binário com 0xFF(255), para que o mesmo só retorne os primeiros 8 bits(1o byte).
3 Agora é só mandar um writebytes.
Comunicação Serial
try {
skt = new Socket(server_ip, server_port);
if (skt.isOpen()) {
//ENVIANDO INFORMAÇÕES
String mensagemOut = "Me mande os registros"; //Mensagem enviada
byte [] bufOut = mensagemOut.getBytes();
if (skt.writeBytes(bufOut, 0, bufOut.length) != bufOut.length) {
<ERRO>
}
//so funciona se a conexão for reaberta neste ponto. O problema é que
o servidor só retorna informações após o pedido, fechando a conexão
ele perde o pedido da sessão.
//RECEBENDO INFORMAÇÕES
int bytesReady = 0;
int bytesReceived = 0;
byte[] buffer = new byte[1000];
try {
bytesReceived = skt.readBytes(buffer,bytesReady,1000-bytesReady);
} catch (Exception e) {
<ERRO>
}
if (bytesReceived > 0) {
mensagemIn = new String(buffer).trim(); //Mensagem recebida
}
}
} catch (Exception e) {
return;
}
Window SW
import waba.ui.*;
import waba.fx.*;
public class o2 extends MainWindow
{
Button bot;
public o2()
{
setTitle("teste");
setBorderStyle(TAB_ONLY_BORDER);
}
public void onStart()
{
add( bot = new Button("Abrir"),CENTER,TOP+4);
}
public void onEvent(Event evento)
{
if(evento.type == ControlEvent.PRESSED && evento.target == bot)
{
Co2 Gcarbono = new Co2();
popupModal(Gcarbono);
}
}
}
class Co2 extends Window
{
Button bot2;
public Co2()
{
setTitle("oi");
setBorderStyle(TAB_ONLY_BORDER);
add(bot2 = new Button("Fechar"),CENTER,TOP+3);
}
public void onEvent(Event event)
{
if(event.type == ControlEvent.PRESSED && event.target == bot2)
{
unpop();
}
}
}