📄 abstractmessagerecognizer.java
字号:
package ffcs.lbp.common;
import java.nio.ByteBuffer;
import net.gleamynode.netty2.Message;
import net.gleamynode.netty2.MessageParseException;
import net.gleamynode.netty2.MessageRecognizer;
import ffcs.lbp.LbpMessage;
import ffcs.logging.Log;
import ffcs.logging.LogFactory;
/**
* <p>Title: 小区推送LBP项目</p>
* <p>Description:
* 协议封装类,把字节流封装成相应的Message包
* </p>
* <p>Copyright: 2007 福建福富软件技术股份有限公司 </p>
* <p>Company: 福建福富软件技术股份有限公司</p>
* @author chenxin
* @version $Rev:1.0 $Date: 2007-07-05
*/
public abstract class AbstractMessageRecognizer implements MessageRecognizer {
private static Log log = LogFactory.getLog(AbstractMessageRecognizer.class);
/**
* 根据消息ID得到指定的消息
* @param ByteBuffer
* @return
* (1)SmMessage 短信消息包,
* (2)null 当buf的数据不足于构造一个消息包的时候,返回空
* @throws MessageParseException
*/
public abstract LbpMessage LbpMessageRecognize(ByteBuffer buf)throws MessageParseException;
/**
* 把数据包(字节)封装成相应的Message对象
* @param 数据包BUF
* @return Message 消息对象
* @throws MessageParseException 数据包解析出送,抛出该异常
*/
public Message recognize(ByteBuffer buf) throws MessageParseException {
/**
* socket的BUF日志,只有在debug模式下,才会打印,
* 以16进制的形式显示,显示的内容为当前socket缓冲区的内容
*/
if (log.isDebugEnabled()) {
int position = buf.position();
int limit = buf.limit();
byte[] array = new byte[buf.remaining()];
buf.get(array);
String s = LbpMessage.byte2hexString(array);
log.debug("收到消息:"+ s);
buf.position(position);
buf.limit(limit);
}
/**
* 通过子类得到具体的消息包
* 可能为空,当buf的数据不足于构造一个消息包的时候,返回空
*/
LbpMessage lbpMessage = LbpMessageRecognize(buf);
/**
* 当socket缓冲区数据,不足于一个消息包大小的时,消息返回为空
* 直到socket断续接收到数据,缓冲区数据达到消息包的大小时,在组装消息对象
*/
if(lbpMessage ==null){
return null;
}
//把消息转换成(LbpMessageAdapter)netty消息适配器
return new LbpMessageAdapter(lbpMessage);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -