`
wukele
  • 浏览: 32694 次
  • 性别: Icon_minigender_1
  • 来自: 泉州
社区版块
存档分类
最新评论

dwr 3 ActiveReverseAjax 推技术 反转 实现 ScriptSession 过滤 发送到指定客户端

阅读更多

1.参考网上人家 dwr2.0 是怎么保存每个客户端的ScriptSession,可以保持客户端id,也可以通过设置ScriptSession的属性来达到目的。

 

2.参考下面的方面来实现过滤。

 

 

Browser.withPageFiltered(page,new JsSessionFilter()  ,new Task()); 

 

JsSessionFilter类代码如下

 

package com.thinkdual.extend.dwr;

import java.util.List;

import org.directwebremoting.ScriptSession;
import org.directwebremoting.ScriptSessionFilter;

import com.thinkdual.cfg.user.CfgUser;
import com.thinkdual.extend.listener.OnLineUser;
import com.thinkdual.util.StrUtil;

/**
 * ---------------------------------------------<br>
 * 过滤那些用户没必要收到消息<br>
 * <br>
 * Version: 1.0<br>
 * Author: wuqingshun<wukele@gmail.com><br>
 * DateTime: 2011-1-24 上午11:48:03<br>
 * ---------------------------------------------<br>
 * 修改版本历史<br>
 * *********************************************<br>
 * Author:<br>
 * DateTime:<br>
 * 内容:<br>
 * *********************************************<br>
 */

public class JsSessionFilter implements ScriptSessionFilter {
    private String roleids = "";
    
    public JsSessionFilter(String roleids) { 
        this.roleids = roleids;
    }
/**
 * 如果返回ture,则该ScriptSession发送信息,返回false则该ScriptSession过滤掉。
 */
    @Override
    public boolean match(ScriptSession scriptSession) { 
      
        String userUnid = (String) scriptSession.getAttribute("userUnid");
        userUnid = StrUtil.checkNull(userUnid);
        List<CfgUser> users = OnLineUser.users;  
 
        if("".equals(userUnid)) return false;
        if("".equals(roleids)) return true;
        for(int i = 0; i < users.size();i++) {
            CfgUser user = users.get(i); 
 
            if( user.getUnid().equals(userUnid)) { 
                return true;
            } 
        }  
        return false;
    }

}

 Task类

 

package com.thinkdual.extend.dwr;

import java.util.Collection;
import java.util.Iterator;

import org.directwebremoting.Browser;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;

/**
 * ---------------------------------------------<br>
 * 说明<br>
 * <br>
 * Version: 1.0<br>
 * Author: wuqingshun<wukele@gmail.com><br>
 * DateTime: 2011-1-24 下午06:47:11<br>
 * ---------------------------------------------<br>
 * 修改版本历史<br>
 * *********************************************<br>
 * Author:<br>
 * DateTime:<br>
 * 内容:<br>
 * *********************************************<br>
 */

public class Task implements Runnable {
    private String msg = "";

    public Task(String msg) {
        this.msg = msg;
    }

    @Override
    public void run() {
        //获取所有根据我们写的过滤器返回true的ScriptSession
//网上很多都是调用ScriptSessions.addScript(scriptString)这个对所有客户端都发送信息
        Collection sessions = Browser.getTargetSessions(); 
        ScriptSession scriptSession;
        for (Iterator i = sessions.iterator(); i.hasNext();) {
            scriptSession = (ScriptSession) i.next();
            ScriptBuffer scriptbuffer = new ScriptBuffer("openMsg('" +       msg + "');");
            scriptSession.addScript(scriptbuffer);
        }
    }

}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics