UserMacInfo

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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值