亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chat.java

?? 這是一個基于AJAX的聊天室程序。它在DWR例子的基礎上加以改進增加一些新的功能包括emoticon(表情),bbcode,消息持久化,粘性信息,自動分解url和image鏈接。在線Demo:http
?? JAVA
字號:
package org.ellab.elchat;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.javabb.bbcode.ProcessBBCode;

import uk.ltd.getahead.dwr.ExecutionContext;

/**
 * The main DWR interface for the chating logic.
 */
public class Chat {
    //private static Log log = LogFactory.getLog(Chat.class);

    private static LinkedList messages;
    private static LinkedList stickyMessages;
    private static MessageDatabase messageDatabase;
    private static ChatConfig config = ChatConfig.getInstance();

    // for apache mod_proxy
    private static final String HTTP_HEADER_FORWARDED_FOR = "x-forwarded-for";
    private static final String IMG_SRC_PREFIX = "___IMAGE_SRC_PREFIX___";
    private static final String MATCH_URL = "[-:\\w\\.]+(/([-:/?~!@#$%^&*()-_=+\\w\\.]*";

    static void init(String persistFile) {
        if (persistFile != null && persistFile.trim().length() > 0) {
            messageDatabase = MessageDatabase.load(persistFile);
            messages = messageDatabase.getMessages();
            stickyMessages = messageDatabase.getStickyMessages();
        }
        else {
            messages = new LinkedList();
            stickyMessages = new LinkedList();
        }
    }

    public List addMessage(String user, String text, boolean preview, boolean enableEmotIcon, boolean enableImage,
            boolean enableBBCode) {
        if (text != null && text.trim().length() > 0) {
            text = text.trim();

            if (!Command.process(text, this, config)) {
                if (config.isSuspend()) {
                    return null;
                }

                String ip = getRemoteAddr(ExecutionContext.get().getHttpServletRequest());

                Message message = createMessage(ip, user, text, enableEmotIcon, enableImage, enableBBCode);

                messages.addFirst(message);
                while (messages.size() > config.getLimit()) {
                    removeLastMessage();
                }

                persistMessage();
            }
        }

        return getMessages();
    }

    Message createMessage(String ip, String user, String text, boolean enableEmotIcon, boolean enableImage,
            boolean enableBBCode) {

        String newUser;
        String plainUser;
        String newText = text;
        String plainText;

        if (newText.length() > config.getMsgLength()) {
            newText = newText.substring(0, config.getMsgLength());
        }

        newUser = encodeHTML(user);
        if (config.isEnableHtmlEscape()) {
            newText = encodeHTML(newText);
        }

        plainUser = newUser;
        plainText = newText;

        //BBCode is disabled until find a releasd bbcode library
        if (enableBBCode) {
            ProcessBBCode bbcode = new ProcessBBCode();
            bbcode.setAcceptBBCode(true);
            bbcode.setAcceptHTML(true);
            newText = bbcode.preparePostText(newText);
        }

        if (config.isEnableImage() && enableImage) {
            // image
            // replace http to PREFIX to skip http replacement
            newText = (newText + " ").replaceAll(
                    "http(s?://" + MATCH_URL + ")?\\."
                            + "(([jJ][pP][eE]?[gG])|([gG][iI][fF])|([pP][nN][gG])|([bB][mM][pP])|([tT][iI][fF]?[fF]))"
                            + "))(\\s|<br\\/?>)", "<img src='" + IMG_SRC_PREFIX + "$1' border='0'/>").trim();
        }

        if (config.isEnableUrl()) {
            // http(s)://
            newText = (newText + " ").replaceAll("(https?://" + MATCH_URL + "))?)(\\s|<br\\/?>)",
                    "<a href='$1' target='_blank'>$1</a>$4").trim();

            // news://
            newText = (newText + " ").replaceAll(
                    "(news://" + MATCH_URL + "))?)(\\s|<br\\/?>)",
                    "<a href='http://ellab.org:8080/elnews/readNews.do"
                            + "?formAction=readNews&host=&submit=Submit&showImage=on&showMime=on&url=" + "$1"
                            + "' target='_blank'>$1</a>$4").trim();
        }

        if (config.isEnableImage() && enableImage) {
            // replace back PREFIX to http
            newText = newText.replaceAll("<img src='" + IMG_SRC_PREFIX, "<img src='http");
        }

        if (config.isEnableMsgEmotIcon() && enableEmotIcon) {
            newText = EmotIcon.process(newText);
        }
        if (config.isEnableUserEmotIcon()) {
            newUser = EmotIcon.processUserEmot(newUser.toLowerCase());
        }

        return new Message(user, newUser, plainUser, ip, text, newText, plainText);
    }

    void setSticky(long messageId) {
        for (Iterator it = messages.iterator(); it.hasNext();) {
            Message msg = (Message) it.next();
            if (msg.getId() == messageId) {
                Message newMsg = msg.copyTo();
                newMsg.setSticky(true);
                stickyMessages.addFirst(newMsg);

                persistMessage();
                return;
            }
        }
    }

    void removeSticky(long messageId) {
        for (Iterator it = stickyMessages.iterator(); it.hasNext();) {
            Message msg = (Message) it.next();
            if (msg.getId() == messageId) {
                msg.setSticky(false);
                stickyMessages.remove(msg);
                messages.addLast(msg);

                persistMessage();
                return;
            }
        }
    }

    void removeFirstMessage() {
        if (messages.size() > 0) {
            messages.removeFirst();
        }
    }

    void removeLastMessage() {
        if (messages.size() > 0) {
            messages.removeLast();
        }
    }

    void clearMessage() {
        messages.clear();
    }

    List getNonStickyMessage() {
        return messages;
    }

    void clearSticky() {
        stickyMessages.clear();
    }

    private static String encodeHTML(String s) {
        s = s.replaceAll("&", "&amp;");
        s = s.replaceAll("<", "&lt;");
        s = s.replaceAll(">", "&gt;");
        s = s.replaceAll("\"", "&quot;");
        s = s.replaceAll("(\r\n|\n\r|\n|\r)", "<br/>");

        return s;
    }

    public List getMessages() {
        HttpServletRequest request = ExecutionContext.get().getHttpServletRequest();
        HttpSession session = request.getSession();
        if (session != null) {
            String sessionId = session.getId();
            String ip = getRemoteAddr(request);
            SessionMap.access(sessionId, ip);
        }

        if (config.isSuspend()) {
            throw new SuspendException();
        }
        List list = new ArrayList();
        list.addAll(messages);
        list.addAll(stickyMessages);

        return list;
    }

    public List getUserList(String user) {
        HttpSession session = ExecutionContext.get().getHttpServletRequest().getSession();

        if (session != null) {
            String sessionId = session.getId();
            SessionMap.setSessionUser(sessionId, user);
        }
        return SessionMap.getUserList();
    }

    private void persistMessage() {
        if (messageDatabase != null) {
            messageDatabase.persist();
        }
    }

    private static String getRemoteAddr(HttpServletRequest request) {
        String addr = request.getHeader(HTTP_HEADER_FORWARDED_FOR);
        if (addr == null || addr.length() == 0 || addr.trim().length() == 0) {
            addr = request.getRemoteAddr();
        }

        return addr;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区在线观看免费| 91精品国产高清一区二区三区| 免费成人性网站| 亚洲国产日韩av| 水野朝阳av一区二区三区| 亚洲精品少妇30p| 一区二区三区在线视频免费| 亚洲精品免费电影| 亚洲另类中文字| 亚洲免费大片在线观看| 一区二区三区四区精品在线视频| 日韩理论电影院| 亚洲国产一区二区三区| 亚洲福利视频一区二区| 青青草原综合久久大伊人精品| 免费成人结看片| 国产麻豆9l精品三级站| 91在线国内视频| 欧美日韩免费一区二区三区视频| 69成人精品免费视频| 日韩久久久久久| 国产三级三级三级精品8ⅰ区| 国产精品午夜电影| 亚洲最大色网站| 蜜臀av一区二区在线免费观看| 国产毛片一区二区| 一本大道久久a久久综合| 91国偷自产一区二区开放时间 | 中文字幕成人av| 国产精品剧情在线亚洲| 一区二区三区丝袜| 久久97超碰国产精品超碰| 国产成人日日夜夜| 欧美疯狂做受xxxx富婆| 久久久九九九九| 日韩高清欧美激情| 懂色av一区二区在线播放| 欧美在线观看禁18| 国产婷婷色一区二区三区在线| 亚洲一二三级电影| 成人免费高清视频在线观看| 欧美久久一区二区| 国产精品国产自产拍高清av王其| 日韩电影免费在线观看网站| 成人av集中营| 精品国产亚洲在线| 天堂av在线一区| 色呦呦国产精品| 国产欧美日韩综合| 精品亚洲国产成人av制服丝袜| 色悠久久久久综合欧美99| 国产亚洲美州欧州综合国| 日韩精品电影在线| 色婷婷精品大在线视频| 国产精品日韩精品欧美在线| 久久www免费人成看片高清| 欧美最猛性xxxxx直播| 1000部国产精品成人观看| 久草精品在线观看| 日韩一级免费观看| 亚洲大片一区二区三区| 99国产精品久久久| 国产精品理伦片| 粗大黑人巨茎大战欧美成人| 欧美第一区第二区| 另类调教123区| 日韩一区二区中文字幕| 日韩国产欧美三级| 91精品在线一区二区| 亚洲无线码一区二区三区| 97久久人人超碰| 亚洲欧美一区二区三区极速播放| 国产999精品久久久久久绿帽| 精品国产91九色蝌蚪| 免费观看久久久4p| 欧美一区二区三区的| 日本伊人午夜精品| 欧美sm美女调教| 国产东北露脸精品视频| 亚洲国产精品精华液2区45| 国产成人免费网站| 自拍视频在线观看一区二区| 99re成人精品视频| 亚洲国产一二三| 91精品欧美一区二区三区综合在| 青青草成人在线观看| 久久先锋影音av| 成人午夜精品一区二区三区| 国产精品麻豆欧美日韩ww| 成人视屏免费看| 亚洲精品va在线观看| 欧美日韩一区 二区 三区 久久精品| 亚洲一区二区在线观看视频| 欧美视频你懂的| 蜜臀av一区二区三区| 国产亚洲人成网站| 日本韩国欧美三级| 青椒成人免费视频| 国产欧美一区在线| 在线视频一区二区三区| 蜜臀av在线播放一区二区三区| 国产亚洲欧美色| 欧美私模裸体表演在线观看| 久久99精品久久久| 亚洲四区在线观看| 欧美成人aa大片| av亚洲精华国产精华精华| 香蕉成人伊视频在线观看| 2欧美一区二区三区在线观看视频| 99视频一区二区| 美女网站色91| 亚洲猫色日本管| 精品久久久久香蕉网| 91女人视频在线观看| 捆绑紧缚一区二区三区视频 | 色婷婷久久综合| 国内精品第一页| 亚洲午夜私人影院| 国产精品三级电影| 精品噜噜噜噜久久久久久久久试看 | 亚洲在线视频免费观看| 26uuu精品一区二区| 在线观看欧美日本| 国产精品自拍一区| 日韩电影免费在线观看网站| 亚洲视频免费在线观看| 久久久午夜精品| 日韩欧美国产一区在线观看| eeuss国产一区二区三区| 蜜桃av一区二区三区| 夜夜精品视频一区二区| 国产清纯美女被跳蛋高潮一区二区久久w | 精品少妇一区二区三区在线视频| 99热这里都是精品| 国产福利视频一区二区三区| 美女视频黄a大片欧美| 亚洲一区二区影院| 亚洲欧美日韩综合aⅴ视频| 久久精品一区二区三区四区| 日韩美女视频一区二区在线观看| 欧美三区在线观看| 在线视频欧美精品| 99re这里只有精品首页| 国产91色综合久久免费分享| 国产一区二区三区日韩| 激情图片小说一区| 久久er精品视频| 久久97超碰国产精品超碰| 毛片av一区二区三区| 日本不卡高清视频| 精品在线观看免费| 极品尤物av久久免费看| 久久69国产一区二区蜜臀| 久久精品国产在热久久| 精品一区二区三区免费毛片爱 | av电影在线观看不卡| 成人高清在线视频| 99久久亚洲一区二区三区青草| 国产传媒欧美日韩成人| 国产成人av电影在线| 成人免费高清视频| 91黄色激情网站| 67194成人在线观看| 日韩免费一区二区三区在线播放| 日韩精品自拍偷拍| 久久日韩精品一区二区五区| 精品国产伦一区二区三区免费| 国产午夜久久久久| 综合久久国产九一剧情麻豆| 亚洲午夜免费视频| 另类调教123区| 国产电影精品久久禁18| 99麻豆久久久国产精品免费优播| 色一情一乱一乱一91av| 欧美精品乱码久久久久久| 日韩免费观看高清完整版| www国产精品av| 亚洲色图视频网| 日本中文字幕一区二区视频| 国产一区91精品张津瑜| 色综合天天综合狠狠| 91精品国产手机| 久久精品一区八戒影视| 亚洲一区在线观看视频| 极品少妇xxxx偷拍精品少妇| 99精品欧美一区| 欧美大黄免费观看| 亚洲另类一区二区| 久久av资源站| 欧美性色欧美a在线播放| 欧美精品一区二区三区高清aⅴ| 亚洲欧洲韩国日本视频| 欧美a级一区二区| 91色在线porny| 久久久久久久综合日本| 亚洲午夜精品一区二区三区他趣| 激情综合五月天| 欧美日韩一级大片网址| 国产精品美女久久久久久2018 | 亚洲国产精品尤物yw在线观看|