chx 学习jForum笔记六-MostUsersEverOnline的结束及ForumAction-list的开始

2010.12.7 继续查找关键字MostUsersEverOnline

下面这段是存在于net.jforum.view.forum/ForumAction.java中

    public void list()
    {
        this.setTemplateName(TemplateKeys.FORUMS_LIST); //这句没看懂,从字面看应该是设置模板的名称
        this.context.put("allCategories", ForumCommon.getAllCategoriesAndForums(true));//页面显示的所有分类和板块(检查有无未读的贴子)
        this.context.put("topicsPerPage", Integer.valueOf(SystemGlobals.getIntValue(ConfigKeys.TOPICS_PER_PAGE)));
        this.context.put("rssEnabled", SystemGlobals.getBoolValue(ConfigKeys.RSS_ENABLED));
        this.context.put("totalMessages", Integer.valueOf(ForumRepository.getTotalMessages()));//页面显示的总文章数
        this.context.put("totalRegisteredUsers", ForumRepository .totalUsers()); //页面显示的总注册人数
        this.context.put("lastUser", ForumRepository.lastRegisteredUser()); //页面显示的最后注册用户
        SimpleDateFormat df = new SimpleDateFormat(SystemGlobals.getValue(ConfigKeys.DATE_TIME_FORMAT), Locale.getDefault());
        GregorianCalendar gc = new GregorianCalendar();
        this.context.put("now", df.format(gc.getTime())); //页面显示的当前时间
        this.context.put("lastVisit", df.format(SessionFacade.getUserSession().getLastVisit())); //应该是取最后登录时间
        this.context.put("forumRepository", new ForumRepository()); //暂时没看懂,字面是应该页面显示的主体
        // Online Users
        this.context.put("totalOnlineUsers", Integer.valueOf(SessionFacade.size())); //页面显示的当前在线人数 ,后面有再次设置,不知此句是否是多余的。
        int aid = SystemGlobals.getIntValue(ConfigKeys.ANONYMOUS_USER_ID); //取游客ID
        List<UserSession> onlineUsersList = SessionFacade.getLoggedSessions();  //取当前用户列表
        // Check for an optional language parameter
        UserSession currentUser = SessionFacade.getUserSession(); //取当前用户
        if (currentUser.getUserId() == aid) { //当前用户为游客
            String lang = this.request.getParameter("lang"); //语言
            if (lang != null && I18n.languageExists(lang)) {
                currentUser.setLang(lang); //设置语言
            }
        }
        // If there are only guest users, then just register
        // a single one. In any other situation, we do not
        // show the "guest" username
        if (onlineUsersList.isEmpty()) {
            UserSession us = new UserSession();
            us.setUserId(aid);
            us.setUsername(I18n.getMessage("Guest"));
            us.setStartTime(new Date(System.currentTimeMillis()));
            onlineUsersList.add(us);
        }
        int registeredSize = SessionFacade.registeredSize(); //取在线会员
        int anonymousSize = SessionFacade.anonymousSize();   //取在线游客
        int totalOnlineUsers = registeredSize + anonymousSize; //取在线人数
        this.context.put("userSessions", onlineUsersList);  //设置页面显示的在线用户列表
        this.context.put("totalOnlineUsers", Integer.valueOf(totalOnlineUsers));//设置页面显示的在线会员
        this.context.put("totalRegisteredOnlineUsers", Integer.valueOf(registeredSize)); //设置页面显示的在线游客
        this.context.put("totalAnonymousUsers", Integer.valueOf(anonymousSize));  //设置页面显示的在线人数
        // Most users ever online    峰值人数和时间
        MostUsersEverOnline mostUsersEverOnline = ForumRepository.getMostUsersEverOnline();   //取记录的峰值人数和时间
        if (totalOnlineUsers > mostUsersEverOnline.getTotal()) { //当前在线人数大于峰值人数
            mostUsersEverOnline.setTotal(totalOnlineUsers);      //设置峰值人数
            mostUsersEverOnline.setTimeInMillis(System.currentTimeMillis()); //设置峰值时间
            ForumRepository.updateMostUsersEverOnline(mostUsersEverOnline); //将峰值人数和时间记入数据表
        }
        this.context.put("mostUsersEverOnline", mostUsersEverOnline); //设置页面显示的峰值人数和时间
    }

 

小结:

峰值人数的检查和更新,应该是在这里完成的。

 

从笔记一到笔记六,完成了对峰值人数和时间的整个分析。

ForumRepository. getMostUsersEverOnline()//取峰值信息

此处会调用(MostUsersEverOnline)cache.get(FQN, MOST_USERS_ONLINE);  //从缓存中取峰值人数

如果值为空,则通过 instance.loadMostUsersEverOnline(DataAccessDriver.getInstance().newConfigDAO());

调用了ForumRepository. loadMostUsersEverOnline(ConfigDAO cm)//从数据表读取峰值人数信息

如果当前在线总人数超过峰值,则会调用ForumRepository. updateMostUsersEverOnline(MostUsersEverOnline m) //设置峰值人数。

而此过程会通过ConfigDAO.insert(config)向参数数据表中插入新值或通过ConfigDAO.update(config)更新参数数据表中内容,并且cache.add(FQN, MOST_USERS_ONLINE, m); //修改缓存中的值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值