⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chat.asp

📁 ajax chat you can test and study
💻 ASP
📖 第 1 页 / 共 2 页
字号:
                    if (next() == 'r' && next() == 'u' && next() == 'e') {
                        next();
                        return true;
                    }
                    break;
                case 'f':
                    if (next() == 'a' && next() == 'l' && next() == 's' &&
                            next() == 'e') {
                        next();
                        return false;
                    }
                    break;
                case 'n':
                    if (next() == 'u' && next() == 'l' && next() == 'l') {
                        next();
                        return null;
                    }
                    break;
            }
            error("Syntax error");
        }

	function ctor() {
	    var name = '';
	    if (ch == '@') {
		next();
		while (ch == '.' || (ch.toUpperCase() >= 'A' &&
				     ch.toUpperCase() <= 'Z')) {
		    name += ch;
		    next();
		}
		var arg = val();
		if (name in ctors) {
		    return ctors[name](arg);
		} else {
		    error("Unknown ctor " + name);
		}
	    }
	    error("Bad ctor");
	}

        function val() {
            white();
            switch (ch) {
	        case '@':
		    return ctor();
                case '{':
                    return obj();
                case '[':
                    return arr();
                case '"':
                    return str();
                case '-':
                    return num();
                default:
                    return ch >= '0' && ch <= '9' ? num() : word();
            }
        }
        return val();
    }
};


var RPC = {
    htmlEn: function(ss){
        var s=ss;
        s = s.replace(/\&/g, '&amp;');
        s = s.replace(/\</g, '&lt;');
        s = s.replace(/\>/g, '&gt;');
        s = s.replace(/\"/g, '&quot;');
        return s;
    },
    getPara: function(s, k){
        var a = s.match(new RegExp('([&|\?|#]|\\b)('+ k +'=)([^&]*)([&]|\\b)'));
        var ret;
        if(a!=null){
            ret = decodeURIComponent(a[3]);
        }else{ret = '({})';}
        return ret;
    },
    padZeros : function (s, w) {
        if(!w){w=2;}
        for (var n = w - s.length; n > 0; n--) {
            s = '0' + s;
        }
        return s;
    },
    timeStamp: function(bL) {
        var d = new Date();
        var ret = d.getFullYear() + "-" + RPC.padZeros(d.getMonth()) + "-" + RPC.padZeros(d.getDate());
        if(bL){
            ret += " " + RPC.padZeros(d.getHours()) + ":" + RPC.padZeros(d.getMinutes()) + ":" + RPC.padZeros(d.getSeconds());
        }
        return ret;
    },
    iniData : function () {
          return { index: 0, data: [] };
    },
    handler : function (params) {
        var d, ret = "";
        var action = params.action;
        var arg = params.arg;
        var index = params.index;
        if(!action){action='get'; arg={};}
        if(!index){index=-1;}

        try{
            Application.Lock();
            var schat_index = Application("schat_index");

            // if get and no data to udpate, ignore it
            if( !(action=="get" && index == schat_index) ){
                 //get global cache data
                 if(g_appMode){
                    if(Application('schat_data')){
                        d = JSON.parse(Application('schat_data'));
                    }
                 }else{
                    d = JSONDB.load(g_curDb);
                 }
                 if (!d) {
                    d = RPC.iniData();
                 }

                //handle action
                 switch (action) {
                 case "say": {
                       var _t=arg.who;
                       if(!_t || _t==""){
                            arg.who = g_realip;
                       }
                       Application("schat_index") = ++d.index;

                       d.data.push([
                            d.index,
                            RPC.htmlEn(arg.who.substring(0,64)),
                            g_realip,
                            RPC.htmlEn(arg.words.substring(0,256)),
                            RPC.timeStamp(true)
                        ]);

                        // bake to file
                        if(d.index % g_count === 0 ){
                            JSONDB.SaveByDay(d);
                        }

                        // keep the count
                        while(d.data.length > g_count){
                            d.data.shift();
                        }

                        // save global cache data
                        if(g_appMode){
                            Application("schat_data")=JSON.stringify(d);
                        }else{
                            JSONDB.save(g_curDb, d);
                        }

                   }
                   //RESUME
                   case "get": {
                       var i, result = [], entry;
                       for (i = d.data.length - 1; i >= 0; i--) {
                           entry = d.data[i];
                           if(entry[0] <= index){
                               break;
                           }
                           result.unshift(entry);
                       }
                       ret = {index: d.index, updates: result};
                       break;
                   }
                   case "hlist":{
                        ret = JSONDB.getFileList('.');
                        break;
                   }
                   case "history":{
                        var fn=arg.fn?arg.fn:"";
                        var db = JSONDB.load(fn);
                        if (db) {
                            ret = {index: db.index, updates: db.data};
                        }
                        break;
                   }
                }
            }
         }catch(e){}finally{
             Application.UnLock();
         }
         return ret;
     },
    exceptionToJson: function (e) {
        var result;
        if ((typeof e == typeof {}) && ("name" in e) && (e.name == "RPCServerException")) {
            result = e;
        } else if ((typeof e == typeof {}) && ("message" in e)) {
            result = { message: e.message, name: e.name };
        } else {
            result = { message: e.toString(), name: null };
        }
        return {toJsonString: function () {
            return "@exception " + JSON.stringify(result);
        }};
    }
};

var JSONDB = {
    fs: Server.CreateObject("Scripting.FileSystemObject"),
    load: function (relpath) {
        var ret, f, path = Server.MapPath(relpath);;
        try{
            f = JSONDB.fs.OpenTextFile(path, 1);
            ret = JSON.parse(f.ReadAll());
        }catch(e){
            ret = undefined;
        }finally{
            try{
                if(f){
                    f.Close();
                    delete f;
                }
            }catch(e){}
        }
        return ret;
    },
    save: function (relpath, data) {
        var ret,f,path = Server.MapPath(relpath);
        try{
            f = JSONDB.fs.CreateTextFile(path);
            f.WriteLine(JSON.stringify(data));
            ret=true;
        }catch(e){
            ret=false;
        }finally{
            try{
                if(f){
                    f.Close();
                    delete f;
                }
            }catch(e){}
        }
        return ret;
    },
    SaveByDay:function(d){
        var pth = g_dbfilePreTag + RPC.timeStamp();
        try{
            var bak = JSONDB.load(pth);
            if(!bak){
                bak = RPC.iniData();
            }
            bak.index = d.index;
            var bakD=bak.data, dbD = d.data;
            for(var i=0, l=dbD.length; i<l ;i++){
                bakD.push(dbD[i]);
            }
            JSONDB.save(pth, bak);
        }catch(e){}
    },
    getFileList: function (relpath){
          var strPath = Server.MapPath(relpath);
          var folder = JSONDB.fs.GetFolder(strPath);
          var ret = [];
          var files = new Enumerator(folder.files);
          for(var i=0; !files.atEnd(); files.moveNext()){
            if(files.item().Name.indexOf(g_dbfilePreTag)==0){
                ret.push([files.item().Name, files.item().Size]);
            }
            i++;
          }
          delete files;
          delete folder;
          return ret;
    }
};

%>

<%/*shell code*/%>
<script language="VBScript" runat="server">
    Dim g_reqData, g_realip, g_dbfilePreTag, g_curDb, g_count, g_appMode
    g_reqData = BinaryToString(Request.BinaryRead(Request.TotalBytes))
    g_realip = getIP
    g_dbfilePreTag="chat_"
    g_curDb="chat"
    g_count = 20
    g_appMode = false
</script>
<%
    try {
        var params = JSON.parse(RPC.getPara(g_reqData,"para"));
        Response.Write(JSON.stringify(RPC.handler(params)));
    }catch(e){
        Response.Write(JSON.stringify(RPC.exceptionToJson(e)));
    }
%>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -