JAVA技巧(客户访问限制管理器)

JAVA技巧(客户访问限制管理器),第1张

JAVA技巧(客户访问限制管理器),第2张

前段时间开发短信收发系统的时候遇到了一个问题,就是N个对象都可以通过移动对象发送短信,但是同一时间只允许一个对象操作。所以设计了一个客户限制管理器的对象来解决,但是由于各种原因没有在实际系统中使用。后来经过深思熟虑,发现它不仅可以用于端口管理,还可以用于其他需要限制客户访问次数的服务。-这里的“客户”是指操作管理器的对象
/**
*客户限制管理器的抽象类
*这个抽象类实现了对客户访问的限制。当客户访问服务时,它可以通过halt(long guestid)方法
阻止其他客户这样做,例如:访问通信端口等。
*/
公共抽象类guest manager {
/* *
*时间:一分钟
protected static final long one _ minute = 60l * 1000 l;
/**
*时间:一小时
*/
保护静态最终长one _ hour = 60L * one _ minute
/**
*自动清理客户记录的间隔
*/
私有长清理间隔;
/**
*客户记录
*/
私有散列表来宾;
/**
*当前限制客户
*/
私人长限客;
/**
*自动清理过期客户的线程
*/
私有线程自动清理线程;
/**
*客户注册
*
* @return返回分配给客户端的ID,如果注册失败则返回-1
*/
public long log in(){
long guest。
//添加客户记录
hashtable guests = get guests();
如果(客人!= null){
guest id = system . current time millis();
guests . put("+guest id," "+guest id);
更新(guest id);
//if(guests . size()= = 1)
//connect();
}
return guest id;
}
/*
*检查客户是否已注册
* @ paramguest ID
*客户ID
* @return如果客户已注册,则返回true,否则返回false
*/
public boolean is log in(long guest ID){
boolean flag = false;
if(guest id > 0){
Hashtable guests = get guests();
如果(客人!= null)
flag = guests . contains key("+guest id);
if(flag)
update(guest id);
}//end if(guest id > 0)
返回标志;
}
/**
*注销客户
*如果仍有其他客户使用该对象,只需注销guestid客户,否则调用disconnect()方法关闭连接。
*
* @ param guest ID
* Customer ID
* @ return返回注销是否成功
public void logout(long guest ID){
hashtable guests = get guests。
如果(客人!= null){
if(guest id > 0 & & guests . contains key("+guest id)){
guests . remove("+guest id);
}//end if(guest id > 0 & & get guests()。contains key("+
//guest id))
}//end if(guests!= null)
}
/* *
* Limit
*如果客户调用此方法,其他客户将无法访问,直到客户调用resume()将其释放。
*
* @ param guest ID
* interrupt ID
* @ return返回中断是否成功
*/
public boolean limit(long guest ID){
boolean flag = false;
if(is log in(guest id)){
update(guest id);
if(is limit(guest id))
返回标志;
limit guest = guest id;
flag = true;
}//end if(is log in(guest id))
返回标志;
}
/*
* Release
*
* @ param guest ID
* Customer ID
* @ return返回发布是否成功
*/br
if(isLogin(guest ID)){
update(guest ID);
if(limit guest = = guest id){
limit guest =-1L;
}//end if(halt guest = = guest id)
flag =!is limit();
}
返回标志;
}
/**
*是否限制其他客户呼叫
* @ return是否限制其他客户呼叫
*/
Protected boolean is limit(){

if(limit guest > 0){
long last time = long . parse long((get guests()。get(
" "+limit guest)));
if(上次> 0){
/如果10分钟内没有响应,评论此客户中断
long time = system . current time millions()-10L
* one _ minute;
if(time < last time)
flag = true;
else
limit guest =-1;
}
}// end if(this.id返回标志;
}
/**
*是否限制该客户访问
*
* @ paramhaltid
*客户ID
* @return返回true表示禁止访问,True表示可以访问
*/public boolean Is limit(long guest ID){
boolean false = True;
if(is log in(guest id)){
update(guest id);
flag = is limit();
if(flag){
if(guest id > 0 & & limit guest = = guest id)
flag = false;
}//end if(flag)
}
返回标志;
}
/**
*获取当前受限客户的ID(该ID是该经理分配给该客户的ID)
*
* @ return返回当前受限客户的ID
*/

}
/* *
*更新客户的最新使用时间
* @ paramguest ID
*客户ID

如果(客人!= null & & guests . contains key("+guest id))
guests . put("+guest id," "
+system . current time millis());
}
/**
*运行监控线程
*/
Protected Void RunThread(){
/Customer自动清理线程
if (autoCleanThread!= null &&!autoclean thread . isa live())
autoclean thread = null;
if(autoclean thread = = null){
autoclean thread = new autoclean thread();
autoclean thread . start();
}//end if(auto clean thread = = null)
}
/*
*设置自动清理客户记录的间隔时间
* @ paramtime
*间隔时间。br/]public void setCleanInterval(long time){
if(time > 0)
clean interval = time;
}
/**
*获取自动清理客户记录的间隔
*
* @return返回自动清理客户记录的间隔(以毫秒为单位)
*/
Public Long getclean interval(
}
/* *
*获取客户记录
*
* @return返回客户记录。格式为
*/
protected hashtable get guests(){
if(guests = = null)
guests = new hashtable();
回头客;
}
/**
*输出错误消息
* @ paramerr
*/
公共抽象void trace(string err);
/**
*自动清除超时的客户端线程
*
私有类自动清理线程扩展线程{
public void run(){
trace("自动清理线程
long interval = ONE _ HOUR/4L;
if(getclean interval()> 0)
interval = getclean interval();
while(autoclean thread = = this & & get guests()。size()> 0){
long time = system . current time millis()
-ONE _ HOUR/2L;
枚举键= getGuests()。keys();
while(keys . hasmorelements()){
String key =(String)keys . nextelement();
if (key!= null){
long last time = long . parse long(get guests()
。get(key));
if(time > last time)
/time out
get guests()。移除(键);
}// end if (key!= null)
}//end while(keys . hasmoreelements())
try {
thread . sleep(interval);
} catch(interrupted exception e){
e . printstacktrace();
trace(" error-"+e . tostring());
}
}// end while(手机!= null & & mobiles . size()> 0)
trace(" autoclean thread线程结束...");[/Br/]}[/Br/]}[/Br/]}[/Br/]/* *
*通信端口的客户端限制管理器的抽象类[/Br/]*该类继承了GuestManager类,增加了connect()、disconnect()等方法[/Br/]*[/Br/]* @ author none[/Br/]*[/Br/]公共抽象类portguestmanager扩展了guest manager {[/Br/]/* *[/Br/]* Connect[/Br/]。
/* *
* Disconnect
*
* @ return返回断开是否成功
*/
Protected抽象Boolean Disconnect();
/**
*是否连通
*
* @return返回端口是否连通
Protected抽象Boolean是否连通();
public long log in(){
long guest id =-1L;
如果(!is connected())
connect();
if(is connected())
guest id = super . log in();
return guest id;
}
public boolean limit(long guest id){
boolean flag = false;
if(is connected())
flag = super . limit(guest id);
返回标志;
}
public void logout(long guest id){
super . logout(guest id);
哈希表guests = get guests();
如果(客人!= null)
if(guests . size()disconnect();
}
public boolean is limit(long guest id){
boolean flag = true;
if(is connected())
flag = super . is limit(guest id);
返回标志;
}
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » JAVA技巧(客户访问限制管理器)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情