package ALBasicProtocolPack.BasicObj;
import java.nio.ByteBuffer;
import ALBasicCommon.ALBasicCommonFun;
/************************
* 本类为消息处理注册对象,主协议号以byte定义,使用数组进行存储以增加查询速度
*
* @author alzq.z
* @email zhuangfan@vip.163.com
* @time Feb 19, 2013 10:57:07 AM
*/
public class ALBasicProtocolDispather
{
protected _AALBasicProtocolMainOrderDealer[] _m_lDealMap;
public ALBasicProtocolDispather()
{
_m_lDealMap = new _AALBasicProtocolMainOrderDealer[256];
//初始化所有的256个处理对象队列
for(int i = 0; i < 256; i ++)
{
_m_lDealMap[i] = null;
}
}
/****************
* 注册主协议处理对象
*
* @author alzq.z
* @time Feb 19, 2013 11:29:20 AM
*/
public void RegProtocol(_AALBasicProtocolMainOrderDealer _dispathRegister)
{
int i = ALBasicCommonFun.byte2int(_dispathRegister.getMainOrder());
_m_lDealMap[i] = _dispathRegister;
}
/**********************
* 返回对应协议的处理对象
* @company Isg @author alzq.zhf
* 2014年11月15日 下午12:02:57
*/
public _AALBasicProtocolMainOrderDealer getDealer(byte _mainOrder)
{
int iIndex = ALBasicCommonFun.byte2int(_mainOrder);
if(iIndex < 0 || iIndex >= _m_lDealMap.length)
return null;
return _m_lDealMap[iIndex];
}
/***********************
* 协议处理函数
*
* @author alzq.z
* @time Feb 19, 2013 11:31:49 AM
*/
public boolean DealProtocol(_IALProtocolReceiver _receiver, ByteBuffer _msg)
{
//获取主协议编号
byte mainOrder = _msg.get();
//获取协议处理对象
_AALBasicProtocolMainOrderDealer dealer = getDealer(mainOrder);
if(null == dealer)
return false;
boolean res = false;
try
{
res = dealer.dispathProtocol(_receiver, _msg);
}
catch (Exception e)
{
e.printStackTrace();
}
return res;
}
}