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);
}
}
}
分享到:
相关推荐
dwr反转聊天事例,dwr推技术反转聊天事例
使用DWR实现服务器端向客户端精确推送消息
这是,以上两个版本的升级版,在原有的基础上,增加了 清空聊天记录,上线通知,用户id,及登录的所在地(ip),聊天信息可选择颜色, ps: 测试的时候记得将 info.txt(聊天信息保存文件) 绝对路径覆盖源码中,以前的路径,
dwr的反转ajax,实现服务器推送数据。
用dwr3实现推送功能,文件就是该实现代码
dwr3,推送消息,指定用户推送demo
使用DWR服务器推送技术实现聊天功能,在线的所有用户以及用户发送的消息都有服务器“推”给客户端进行显示。
包含了dwr推送技术的详细介绍 和 一个基于dwr推送技术的聊天实例
使用dwr推技术实现站内聊天的demo。
实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送
本实例是在一些网络资料的基础上整合出来的一个:以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之...
基于DWR技术实现数据服务器推送,java版本DEMO,无刷新实现前台页面数据实时获取
这是一个十分简单的demo,利用dwr实现了一个服务器推程序,客户端jsp页面不用刷新可以接收到服务器发送过来的消息并显示。多多指教。
springMVC+dwr技术实现消息推送实例,简单实例演示如何用dwr实现后台向前台主动推送消息
myeclipse 工程 简单的实例 点对点聊天功能的实现
使用dwr2.0实现服务器推客户端(结合响应socket服务器推消息)
没事的时候自己写的一个聊天室,用了SSH框架整合DWR推反转AJAX技术,可能有一些不合理的地方,但实现了聊天室的基本功能,希望给大家一些帮助。需要大家根据spring配置文件,配置下Mysql数据库,建一张用户表就可以...
我不能把公司的代码贴出来,所以我自己写了一个DEMO,已经实现了对指定用户发送消息的功能,并且即时显示在指定的用户界面上面.当然你可以修改这些,让它弹出来显示,或者像QQ一样在你页面的某个角落让消息的图标闪动:)
运用Browser 里的相关方法 Browser.withAllSessions Browser.withCurrentPageFiltered
DWR是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。