[APACHE MINA] Dúvida ProtocolCodecFilter

0 respostas
Guitar_Men

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. Exemplo
Comando 1:
   prefixo = 130
   Tamanho = 30 bytes
Comando 2:
   prefixo = 131
   Tamanho = 10 bytes
....
E assim vai... Eu preciso avaliar o prefixo (1 byte) e de acordo com ele eu sei o tamanho da mensagem podendo dar read no buffer no tamanho exato... Quero saber se o código abaixo esta correto:
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...

Criado 5 de julho de 2010
Respostas 0
Participantes 1