pushlet(QQ提示框)

Pushlet 实现服务端往客服端推送消息

系统页面弹出消息框,类似QQ提示框

1. java代码

package com.test.jbpm.common;

import java.io.Serializable;
import java.util.List;
import com.test.jbpm.web.action.BaseAction;
import nl.justobjects.pushlet.core.Dispatcher;
import nl.justobjects.pushlet.core.Event;
import nl.justobjects.pushlet.core.Session;
import nl.justobjects.pushlet.core.SessionManager;
public class NoticePushlet  extends BaseAction implements Serializable{

    // 指定用户id
    public void myUnicast(String user,String message) {
         //必须注册ID  PL.userid="hao";
        if (SessionManager.getInstance().hasSession(user)) {
            SessionManager.getInstance().getSessions();
            Event event = Event.createDataEvent("/flowctrl/main");
            event.setField("noticeKey", message);//内容不能使用中文
            Dispatcher.getInstance().unicast(event, user); 
        } else {
            //Event event = Event.createDataEvent("/jbpm_first/hao");
            //event.setField("noticeKey", "The user:("+user+") not live!");
            //Dispatcher.getInstance().unicast(event, this.getSession().getAttribute("code").toString()); 
            //sDispatcher.getInstance().broadcast(event); 
//            Session[] sessions = SessionManager.getInstance().getSessions();
//            for (Session session : sessions) {
//            }
        }
    }
    public void pushletInterface(List<String> prplflNoticeList) {
        
        Session[] sessions = SessionManager.getInstance().getSessions();
        if (sessions != null && sessions.length > 0) {
            for (Session session : sessions) {
                String sessionId = session.getId();
                String comcode = sessionId.split("->")[0];
                int listLength = 0;
//                for (PrplflNotice pn : prplflNoticeList) {
//                    if (comcode.equals(pn.getComcode())) {
//                        listLength = listLength + 1;
//                    }
//                }

                if (listLength > 0) {
                    String msg = "��" + comcode + "���� " + listLength + " ��4S���뼰ʱ���������Ϣ";
                    Event event = Event.createDataEvent("/flowctrl/main");
                    event.setField("noticeKey", msg);
                    Dispatcher.getInstance().unicast(event, sessionId);
                }
            }
        }
    }


    public void myBroadcast() {
        Event event = Event.createDataEvent("/flowctrl/main"); �
        event.setField("noticeKey", "Broadcast msg");
        Dispatcher.getInstance().broadcast(event);
    }
}
View Code
2.jsp代码
需要引入ajax-pushlet-client.js
<script  type="text/javascript">
    // 消息提醒用js,注册监听
    var usercode = '<%=session.getAttribute("code")%>';
    var timestamp=new Date().getTime();
    PL.userid=usercode;
    //PL.userid=usercode+"->"+timestamp;
    PL.webRoot="${pageContext.request.contextPath}/";
    PL._init();
    PL.joinListen('/flowctrl/main');
    function onData(event) {
          var info=event.get("noticeKey");
          openDia(info);
    }
    
    function openDia(info) {
        document.getElementById('messageInfo').innerHTML = info +'<BR><BR><a href="javascript:void(0);" onclick="deal()" target="page">点击处理(未处理完毕仍可点击以继续)</a>';
        showDiv();
    }
//消息提示使用
        var divTop,divLeft,divWidth,divHeight,docHeight,docWidth,i = 0;
        function showDiv(){
            try{
                divTop = parseInt(document.getElementById("dialog").style.top,10);
                divLeft = parseInt(document.getElementById("dialog").style.left,10);
                divHeight = parseInt(document.getElementById("dialog").offsetHeight,10);
                divWidth = parseInt(document.getElementById("dialog").offsetWidth,10);
                docWidth = document.body.clientWidth;
                docHeight = document.body.clientHeight;
                document.getElementById("dialog").style.top = parseInt(document.body.scrollTop,10) + docHeight - divHeight;
                document.getElementById("dialog").style.left = parseInt(document.body.scrollLeft,10) + docWidth - divWidth;
                document.getElementById("dialog").style.visibility="visible";
            }
            catch(e){}
        }
        function closeDiv()
        {
            document.getElementById('dialog').style.visibility='hidden';
        }
</script>
View Code
原文地址:https://www.cnblogs.com/holdon521/p/4505179.html