java web在线状态_web在线用户状态

packagecom.sw.vo.sy;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importorg.springframework.util.Assert;importcom.sw.tool.Struts2Utils;public classEmplList {public static final int LIST_MAX_SIZE = 100;public static final int INIT = 1;public static final int TIME_OUT = 6 * 60; //应该和服务器周期相同

private static int mapIndex =INIT;private static final Map> emplMap = new HashMap>();private static EmplList emplList = newEmplList();privateEmplList() {

}public staticEmplList getInstance() {returnemplList;

}/*** 添加一个在线用户

*

*@parame*/

private synchronized voidadd(EmplInfo e) {

List l =getList();

e.mapIndex=mapIndex;

e.listIndex= l.size() + 1;

l.add(e);

}public voidaddUser(EmplInfo e) {

EmplInfo e2=getUserByID(e.emplId,e.ip);if(e2!=null){

e2.sessionId=e.sessionId;

}else{

add(e);

}

}/*** 对比IP和ID,查找ID,IP都相等的用户,

* 如果查找出多个,则去除第一个之后的所有。

*@paramid

*@paramip

*@return

*/

privateEmplInfo getUserByID(String id, String ip) {

EmplInfo e2= null;if (id == null || ip == null)returne2;boolean b = true;for (Listl : emplMap.values()) {

Iterator el2 =l.iterator();while(el2.hasNext()) {

EmplInfo e=el2.next();if (id.equals(e.emplId) &&ip.equals(e.ip)) {if(b) {

e2=e;

b= false;

}else{

el2.remove();

}

}

}

}returne2;

}/*** 根据分组号,和sessionid获取用户

*

*@authorzhong

*@parami

*@paramsid

*@return

*/

publicEmplInfo getUserBySID(Integer i, String sid) {

List list =emplMap.get(i);for(EmplInfo e : list) {if (e.sessionId ==sid)returne;

}return null;

}/*** 根据索引值查找用户

*

*@parammapIndex

*@paramListIndex

*@return

*/

privateEmplInfo getUserByIndex(Integer mapIndex, Integer ListIndex) {

EmplInfo e= null;try{

e=emplMap.get(mapIndex).get(ListIndex);

}catch(Exception e2) {return null;

}return Struts2Utils.getSession().getId() == e.sessionId ? e : null;

}/*** 更新用户状态

*

*@authorzhong

*@parame*/

public voidupdate(EmplInfo e) {

EmplInfo e2=getUserByIndex(e.mapIndex, e.listIndex);if (e2 != null)

e2.date= newDate();

}/*** 检查用户状态,并且移除超时用户

*

*@authorzhong*/

public voidcheckStatus() {

Date time= newDate();for(Map.Entry e : emplMap.entrySet()) {

List el = (List) e.getValue();

Iterator el2 =el.iterator();while(el2.hasNext()) {

EmplInfo e2=el2.next();if (time.getTime() - e2.date.getTime() > TIME_OUT * 1000) {

el2.remove();

}

}

}

}/*** 移除一个用户

*

*@authorzhong

*@parame*/

public voidreMove(EmplInfo e) {

List l =emplMap.get(e.mapIndex);

EmplInfo e1=l.get(e.listIndex);if (e.sessionId.equals(e1.sessionId) &&e.emplId.equals(e1.emplId)) {

l.remove(e.listIndex);

}

}/*** 获取一组list,如果超出组边界,就创建一个新组

*

*@authorzhong

*@return

*/

private ListgetList() {int i = 1; //用于记录mapIndex。给add方法使用

for (Listl : emplMap.values()) {if (l.size()

i++;

}

mapIndex=i;

List l2 = new ArrayList();

emplMap.put(i, l2);returnl2;

}public intgetMaxMapIndex() {returnemplMap.size();

}/*** 测试方法,不建议使用,仅用来看值

*@return

*/

public Map>getMap(){returnemplMap;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值