一、实现原理剖析:
1.在群聊中,我们知道如何通过uri获得所有的session集合,但在单对单的聊天中并不需要获取全部,他只需要在彼此的session中进行聊天的管理/展示。
2.为此我们通过构造Map集合,通过单独唯一的key(用户名或者id编号,唯一即可),并同时将当前的session,put进去便可。当我们要指定发送对象时,我们便可获取
被发送对象的session,构建util。调用客户端编写好的js响应方法,产生相应的气泡提示了。
流程:Map构建-》发送消息给指定对象-》通过Map来get对象的session-》通过session构建utli-》util对客户端的js进行调用
ps:前提我们知道dwr中的远程调用Java类是单例模式下的。否则根本无法保存每一个session。
二、实现核心代码:
1.远程调用类:
public class MsgPushService {
public static Map<String, Object> sessionManager = new HashMap<String, Object>();
/**
* 添加客户端session ps:firfox有错误提示..-已解决,将跳转放置dwr的回调函数中
* 1.登录成功后进行调用
* @param username
*/
public String addScriptSession(String username, HttpServletRequest req) {
if(!"".equals(username)&&username!=null){
sessionManager.put(username, WebContextFactory.get().getScriptSession());
}
return "ok";
}
public ScriptSession getScriptSession(String username) {
return (ScriptSession) sessionManager.get(username);
}
/**
* 2.发送消息时进行调用
* @param senderName
* @param receiverName
* @param title
* @param content
* @return
*/
@SuppressWarnings("unchecked")
public String pushMsg(String senderName, String receiverName, String title,
String content, HttpServletRequest req) {
ScriptSes