Galera, estou usando o apache mina como servidor da minha aplicacao.
abaixo o meu codigo do decoder que implementei
public class TextLineDecoder implements ProtocolDecoder {
//alguns metodos aqui!!!
@Override
public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out)
throws Exception {
Context ctx = getContext(session);
int matchCount = ctx.getMatchCount();
// tentando encontrar um padrão...
int oldPos = in.position();
int oldLimit = in.limit();
while (in.hasRemaining()) {
byte b = in.get();
boolean matched = false;
switch (b) {
case '[':
// MENSAGEM 1
matchCount++;
matched = true;
break;
case ']':
// MENSAGEM 2
matchCount++;
matched = true;
break;
default:
matchCount = 0;
}
if (matched) {
// encontrou um padrão !!!
int pos = in.position();
in.limit(pos);
in.position(oldPos);
ctx.append(in);
in.limit(oldLimit);
in.position(pos);
if (ctx.getOverflowPosition() == 0) {
IoBuffer buf = ctx.getBuffer();
buf.flip();
buf.limit(buf.limit() - matchCount);
try {
writeText(session, buf.getString(ctx.getDecoder()), out);
} finally {
buf.clear();
}
} else {
int overflowPosition = ctx.getOverflowPosition();
ctx.reset();
throw new RecoverableProtocolDecoderException(
"A linha é grande demais: " + overflowPosition);
}
oldPos = pos;
matchCount = 0;
}
}
//colocando o resto do buffer.
in.position(oldPos);
ctx.append(in);
ctx.setMatchCount(matchCount);
}
}
Esse decoder esta sendo usado para a seguinte situação:
vem assim do equipamento que conecta nele:
[0700:45896321:78]
Ate ai blza, funciona.
So que apareceu agora a seguinte situação:
[0700:5454554:5454][7878:45454:4545]
O servidor esta quebrando a string no meio e nesse caso nao pode, a informação tem que ser inteira.
Alguem tem alguma ideia de como resolver essa questao?
Att