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);
}
}
}