public class UserMacInfo implements Serializable
{
/**序列化UID */
private static final long serialVersionUID = 600000056L;
/**
* 调测日志记录器
*/
private static final Logger logger = Logger.getLogger(UserMacInfo.class);
/**
* 密码
*/
private String password = null;
/**
* 用户的MAC信息,存储为byte数组,每个MAC的存储长度为6
*/
private byte[] userMac = null;
/**
*
* 获取对应的MAC地址条数。
*
* @return MAC地址条数
*/
public int findMacNum()
{
if (null == userMac)
{
return 0;
}
return userMac.length / PortalCommonConst.SAVE_MAC_LENGTH;
}
/**
*
* 获取密码。
*
* @return 密码
*/
public String getPassword()
{
return password;
}
/**
*
* 设置密码。
*
* @param password 密码
*/
public void setPassword(String password)
{
this.password = password;
}
/**
*
* 获取用户的MAC。
*
* @return 用户的MAC
*/
public byte[] getUserMac()
{
return userMac;
}
/**
*
* 设置用户MAC。
*
* @param userMac 用户的MAC信息
*/
public void setUserMac(byte[] userMac)
{
this.userMac = userMac;
}
/**
*
* 往userMac数组中添加一条MAC信息
* @param userMacs MAC信息
*/
public void addMac(String userMacs)
{
if ((null == userMacs) || ("".equals(userMacs)))
{
logger.recordErrorsLog("userMac is error");
return;
}
// 从MAC表中查找
int index = findMac(userMacs);
if (-1 != index)
{
//找到了对应的记录,直接返回
return;
}
else
{
int byNewBytesLen = 0;
int byMacNum = findMacNum();
byte[] byAddMac = CommonProcess.trasMACFromStringToBytes(userMacs);
byte[] bytes = null;
int moveLen = 0;
int srcBegin = 0;
// 如果配置数据为0,且支持自动认证,默认支持一个
int userMaxMacNum = SystemConfig.getUserMaxMacNum();
if (0 == userMaxMacNum)
{
userMaxMacNum = 1;
}
// 如果当前数组中的记录条数大于最大值,属于系统参数配置从大到小的情况
// 此时需要删除之前多个MAC信息,只保存和配置的最大值一样的MAC数据,且把新的MAC地址添加到最后
if (byMacNum > userMaxMacNum)
{
byNewBytesLen = userMaxMacNum * PortalCommonConst.SAVE_MAC_LENGTH;
bytes = new byte[byNewBytesLen];
moveLen = (userMaxMacNum - 1) * PortalCommonConst.SAVE_MAC_LENGTH;
srcBegin = (byMacNum - userMaxMacNum + 1) * PortalCommonConst.SAVE_MAC_LENGTH;
CommonProcess.bytesAdd(this.userMac, srcBegin, moveLen, bytes, 0);
CommonProcess.bytesAdd(byAddMac, 0, PortalCommonConst.SAVE_MAC_LENGTH, bytes,
byNewBytesLen - PortalCommonConst.SAVE_MAC_LENGTH);
this.userMac = bytes;
}
// 如果当前数组中的记录条数已经达到最大值,删除最开始记录的MAC添加新的MAC
else if (byMacNum == userMaxMacNum)
{
moveLen = (byMacNum - 1) * PortalCommonConst.SAVE_MAC_LENGTH;
CommonProcess.bytesAdd(this.userMac, PortalCommonConst.SAVE_MAC_LENGTH, moveLen, this.userMac, 0);
CommonProcess.bytesAdd(byAddMac, 0, PortalCommonConst.SAVE_MAC_LENGTH, this.userMac, moveLen);
}
// 如果之前没有,直接添加
else if (0 == byMacNum)
{
this.userMac = byAddMac;
}
// 已经有记录,添加到数组后面
else
{
byNewBytesLen = (byMacNum + 1) * PortalCommonConst.SAVE_MAC_LENGTH;
bytes = new byte[byNewBytesLen];
CommonProcess.bytesAdd(this.userMac, 0, byMacNum * PortalCommonConst.SAVE_MAC_LENGTH, bytes, 0);
CommonProcess.bytesAdd(byAddMac, 0, PortalCommonConst.SAVE_MAC_LENGTH,
bytes, byMacNum * PortalCommonConst.SAVE_MAC_LENGTH);
this.userMac = bytes;
}
}
}
/**
*
* 查看当前MAC地址是否存在
*
* @param userMacs 用户MAC地址
* @return 返回-1为未找到,否则返回的是该MAC所在的首位置
*/
public int findMac(String userMacs)
{
String strfindMac = new String(CommonProcess.trasMACFromStringToBytes(userMacs));
String strUserMac = new String(this.userMac);
return strUserMac.indexOf(strfindMac);
}
/**
* 从数组中删除一条MAC信息,删除后的数组重新组合
* @param userMacs 用户MAC地址
*/
public void deleteMac(String userMacs)
{
int index = findMac(userMacs);
if (-1 != index)
{
//取删除一个MAC后的长度,如果大于0,从数组删除,否则直接设置该MAC数组为null
int byNewBytesLen = (findMacNum() - 1) * PortalCommonConst.SAVE_MAC_LENGTH;
if (byNewBytesLen > 0)
{
byte[] bytes = new byte[byNewBytesLen];
CommonProcess.bytesAdd(this.userMac, 0, index, bytes, 0);
CommonProcess.bytesAdd(this.userMac, index + PortalCommonConst.SAVE_MAC_LENGTH,
byNewBytesLen - index, bytes, index);
this.userMac = bytes;
}
else
{
this.userMac = null;
}
}
}
/**
*
* 从MAC数组中得到相应索引的MAC地址。
*
* @param index 索引,等于第几个MAC的数组下表,0表示第一个,1表示第二个,....
* @return 字节数组格式的mac地址
*/
public String getMacByIndex(int index)
{
String userMacs = null;
int macLen = PortalCommonConst.SAVE_MAC_LENGTH;
if (index < findMacNum())
{
byte[] macBytes = new byte[macLen];
CommonProcess.bytesAdd(this.userMac, index * macLen, macLen, macBytes, 0);
userMacs = CommonProcess.trasMACBytesToString(macBytes);
}
return userMacs;
}
}
{
/**序列化UID */
private static final long serialVersionUID = 600000056L;
/**
* 调测日志记录器
*/
private static final Logger logger = Logger.getLogger(UserMacInfo.class);
/**
* 密码
*/
private String password = null;
/**
* 用户的MAC信息,存储为byte数组,每个MAC的存储长度为6
*/
private byte[] userMac = null;
/**
*
* 获取对应的MAC地址条数。
*
* @return MAC地址条数
*/
public int findMacNum()
{
if (null == userMac)
{
return 0;
}
return userMac.length / PortalCommonConst.SAVE_MAC_LENGTH;
}
/**
*
* 获取密码。
*
* @return 密码
*/
public String getPassword()
{
return password;
}
/**
*
* 设置密码。
*
* @param password 密码
*/
public void setPassword(String password)
{
this.password = password;
}
/**
*
* 获取用户的MAC。
*
* @return 用户的MAC
*/
public byte[] getUserMac()
{
return userMac;
}
/**
*
* 设置用户MAC。
*
* @param userMac 用户的MAC信息
*/
public void setUserMac(byte[] userMac)
{
this.userMac = userMac;
}
/**
*
* 往userMac数组中添加一条MAC信息
* @param userMacs MAC信息
*/
public void addMac(String userMacs)
{
if ((null == userMacs) || ("".equals(userMacs)))
{
logger.recordErrorsLog("userMac is error");
return;
}
// 从MAC表中查找
int index = findMac(userMacs);
if (-1 != index)
{
//找到了对应的记录,直接返回
return;
}
else
{
int byNewBytesLen = 0;
int byMacNum = findMacNum();
byte[] byAddMac = CommonProcess.trasMACFromStringToBytes(userMacs);
byte[] bytes = null;
int moveLen = 0;
int srcBegin = 0;
// 如果配置数据为0,且支持自动认证,默认支持一个
int userMaxMacNum = SystemConfig.getUserMaxMacNum();
if (0 == userMaxMacNum)
{
userMaxMacNum = 1;
}
// 如果当前数组中的记录条数大于最大值,属于系统参数配置从大到小的情况
// 此时需要删除之前多个MAC信息,只保存和配置的最大值一样的MAC数据,且把新的MAC地址添加到最后
if (byMacNum > userMaxMacNum)
{
byNewBytesLen = userMaxMacNum * PortalCommonConst.SAVE_MAC_LENGTH;
bytes = new byte[byNewBytesLen];
moveLen = (userMaxMacNum - 1) * PortalCommonConst.SAVE_MAC_LENGTH;
srcBegin = (byMacNum - userMaxMacNum + 1) * PortalCommonConst.SAVE_MAC_LENGTH;
CommonProcess.bytesAdd(this.userMac, srcBegin, moveLen, bytes, 0);
CommonProcess.bytesAdd(byAddMac, 0, PortalCommonConst.SAVE_MAC_LENGTH, bytes,
byNewBytesLen - PortalCommonConst.SAVE_MAC_LENGTH);
this.userMac = bytes;
}
// 如果当前数组中的记录条数已经达到最大值,删除最开始记录的MAC添加新的MAC
else if (byMacNum == userMaxMacNum)
{
moveLen = (byMacNum - 1) * PortalCommonConst.SAVE_MAC_LENGTH;
CommonProcess.bytesAdd(this.userMac, PortalCommonConst.SAVE_MAC_LENGTH, moveLen, this.userMac, 0);
CommonProcess.bytesAdd(byAddMac, 0, PortalCommonConst.SAVE_MAC_LENGTH, this.userMac, moveLen);
}
// 如果之前没有,直接添加
else if (0 == byMacNum)
{
this.userMac = byAddMac;
}
// 已经有记录,添加到数组后面
else
{
byNewBytesLen = (byMacNum + 1) * PortalCommonConst.SAVE_MAC_LENGTH;
bytes = new byte[byNewBytesLen];
CommonProcess.bytesAdd(this.userMac, 0, byMacNum * PortalCommonConst.SAVE_MAC_LENGTH, bytes, 0);
CommonProcess.bytesAdd(byAddMac, 0, PortalCommonConst.SAVE_MAC_LENGTH,
bytes, byMacNum * PortalCommonConst.SAVE_MAC_LENGTH);
this.userMac = bytes;
}
}
}
/**
*
* 查看当前MAC地址是否存在
*
* @param userMacs 用户MAC地址
* @return 返回-1为未找到,否则返回的是该MAC所在的首位置
*/
public int findMac(String userMacs)
{
String strfindMac = new String(CommonProcess.trasMACFromStringToBytes(userMacs));
String strUserMac = new String(this.userMac);
return strUserMac.indexOf(strfindMac);
}
/**
* 从数组中删除一条MAC信息,删除后的数组重新组合
* @param userMacs 用户MAC地址
*/
public void deleteMac(String userMacs)
{
int index = findMac(userMacs);
if (-1 != index)
{
//取删除一个MAC后的长度,如果大于0,从数组删除,否则直接设置该MAC数组为null
int byNewBytesLen = (findMacNum() - 1) * PortalCommonConst.SAVE_MAC_LENGTH;
if (byNewBytesLen > 0)
{
byte[] bytes = new byte[byNewBytesLen];
CommonProcess.bytesAdd(this.userMac, 0, index, bytes, 0);
CommonProcess.bytesAdd(this.userMac, index + PortalCommonConst.SAVE_MAC_LENGTH,
byNewBytesLen - index, bytes, index);
this.userMac = bytes;
}
else
{
this.userMac = null;
}
}
}
/**
*
* 从MAC数组中得到相应索引的MAC地址。
*
* @param index 索引,等于第几个MAC的数组下表,0表示第一个,1表示第二个,....
* @return 字节数组格式的mac地址
*/
public String getMacByIndex(int index)
{
String userMacs = null;
int macLen = PortalCommonConst.SAVE_MAC_LENGTH;
if (index < findMacNum())
{
byte[] macBytes = new byte[macLen];
CommonProcess.bytesAdd(this.userMac, index * macLen, macLen, macBytes, 0);
userMacs = CommonProcess.trasMACBytesToString(macBytes);
}
return userMacs;
}
}