Buenas javeiros...
pessoal, estou desenvolvendo um sistema que utiliza conexões sockets e após algum estudo decidi usar o framework MINA do Apache. Meu sistema irá interpretar diferentes comandos, cada um com um tamanho diferente. ExemploComando 1:
prefixo = 130
Tamanho = 30 bytes
Comando 2:
prefixo = 131
Tamanho = 10 bytes
....
public class Decoder extends CumulativeProtocolDecoder {
protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
//meu prefixo de comando tem 1 byte
if (in.prefixedDataAvailable(1)) {
int prefixo = (int)in.getByte();
//retorna o tamanho da mensagem de acordo com o prefixo
byte[] bytesMensagem = new byte[TratadorComando.obtemTamanhoComando(prefixo)];
//Não estou com o fonte original aqui, mas basicamente copia para bytesMensagem a quantidade de bytes que foi alocada;
in.getBytes(bytesMensagem);
//De acordo com o prefixo instancio a entidade responsável por tratar aquele comando
IComando comando = TratadorComando.obtemTratadorComando(prefix);
//seto os bytes da mensagem
comando.setBytes(in.getBytes);
//mando o objeto pra frente
out.write(comando);
return true;
} else {
return false;
}
}
}
Para ser mais exato minhas dúvidas são:
1 - A utilização do comando in.prefixedDataAvailable está correta ??
2 - Se o pacote for segmentado, essa minha validação de prefixo esta correta ??
3 - Se não estiver correta, como devo proceder ?? Registrar sessão ?? Alguma outra estratégia ??
Valew pessoal...