import fonts.fontAwesome; import win.ui; /*DSG{{*/ var winform = win.form(text="asynHttpServer - 异步HTTP服务器";right=807;bottom=465;bgcolor=16777215;border="none";max=false) winform.add( bk={cls="bk";left=-2;top=-5;right=810;bottom=29;bgcolor=12639424;z=9}; bkplus={cls="bkplus";text="asynHttpServer - 扫码传文件";left=18;top=4;right=203;bottom=26;align="left";color=5921370;z=10}; btnOpen={cls="plus";text='\uF115';left=444;top=50;right=479;bottom=75;dr=1;dt=1;font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=5}; btnOpenUpload={cls="plus";text="打开上传目录";left=568;top=429;right=709;bottom=458;dr=1;dt=1;font=LOGFONT(h=-15);iconStyle={align="left";font=LOGFONT(h=-15;name='FontAwesome');padding={left=8;top=2}};iconText='\uF115';notify=1;textPadding={left=20};z=11}; btnStart={cls="plus";text="重启服务";left=655;top=47;right=755;bottom=76;bgcolor=14935259;dr=1;dt=1;font=LOGFONT(h=-15);iconStyle={align="left";font=LOGFONT(h=-15;name='FontAwesome');padding={left=8;top=2}};iconText='\uF233';notify=1;textPadding={left=20};z=4}; editDocumentRoot={cls="plus";left=131;top=49;right=430;bottom=73;align="right";border={bottom=1;color=-8355712};dl=1;dr=1;dt=1;editable=1;font=LOGFONT(h=-16);z=7}; editPassword={cls="plus";left=441;top=84;right=632;bottom=108;align="left";border={bottom=1;color=-8355712};dl=1;dr=1;dt=1;editable=1;font=LOGFONT(h=-16);z=13}; editPort={cls="plus";left=550;top=49;right=628;bottom=73;align="left";border={bottom=1;color=-8355712};dl=1;dr=1;dt=1;editable=1;font=LOGFONT(h=-16);z=8}; plus={cls="plus";text="访问密码:";left=332;top=90;right=433;bottom=114;align="right";dr=1;dt=1;font=LOGFONT(h=-15);transparent=1;z=12}; qr={cls="plus";left=499;top=132;right=760;bottom=418;db=1;dr=1;dt=1;repeat="scale";z=6}; static={cls="plus";text="端口:";left=484;top=52;right=547;bottom=76;align="right";dr=1;dt=1;font=LOGFONT(h=-15);transparent=1;z=2}; static2={cls="plus";text="网站根目录:";left=15;top=52;right=129;bottom=76;align="right";dl=1;dt=1;font=LOGFONT(h=-15);transparent=1;z=3}; txtMessage={cls="richedit";left=42;top=132;right=469;bottom=418;autohscroll=false;db=1;dl=1;dr=1;dt=1;link=1;multiline=1;vscroll=1;z=1} ) /*}}*/ winform.btnStart.skin( { background={ default=0x668FB2B0; hover=0xFF928BB3; disabled=0xFFCCCCCC; } }) winform.btnOpen.skin( { background={ default=0; hover=0xFF928BB3; disabled=0xFFCCCCCC; } }) winform.btnOpenUpload.skin( { background={ default=0; hover=0xFF928BB3; disabled=0xFFCCCCCC; } }) import fsys.config; config = fsys.config("/config/"); if( io.exist(config.winform.txtMessage) ){ winform.txtMessage.text = config.winform.txtMessage; } else { winform.txtMessage.text = io.getSpecial(0x5/*_CSIDL_MYDOCUMENTS*/) } import web.socket.server; var wsrv = web.socket.server(); var srvHttp = wsrv.httpServer; srvHttp.documentRoot = winform.txtMessage.text; srvHttp.userToken = string.random(18); winform.editPassword.text = srvHttp.userToken; import fsys.info; var cacheSysIcons = {} var getSysIconIndex = function(path){ var sfi = fsys.info.get(path, 0x100/*_SHGFI_ICON*/ | 0x4000/*_SHGFI_SYSICONINDEX*/); if( !(sfi.returnValue ) ) { return; } if(!cacheSysIcons[sfi.iIcon]){ var dataUrl; var bmp = ..gdip.bitmap(sfi.hIcon,1/*_IMAGE_ICON*/); if(bmp){ cacheSysIcons[sfi.iIcon] = bmp.saveToBuffer(".png"); bmp.dispose(); } } if(sfi.hIcon)::DestroyIcon(sfi.hIcon); return sfi.iIcon; } var cacheClientIps = {} srvHttp.run( function(response,request,session){ var token = request.get["t"] : session["token"]; if( #srvHttp.userToken && (token != srvHttp.userToken) ){ winform.txtMessage.printf("客户端:%s 连接被拒绝",request.remoteAddr); response.errorStatus(401) return; } session["token"] = token; if(!cacheClientIps[request.remoteAddr]){ winform.txtMessage.printf("客户端:%s 已连接",request.remoteAddr); cacheClientIps[request.remoteAddr] = true; } response.headers["Access-Control-Allow-Origin"] = "*"; response.headers["Access-Control-Allow-Headers"] = "*" if(request.path=="/main.aardio" && request.get["icon"]){ var iconIdx = tonumber(request.get["icon"]); if(iconIdx!==null){ if(cacheSysIcons[iconIdx]){ response.contentType = "image/png"; response.write(cacheSysIcons[iconIdx]) return; } } response.errorStatus(404); return; } if(request.path=="/upload/main.aardio"){ if(request.method=="DELETE"){ var path = request.postData(); if(path && string.startsWith(path,"/upload/")){ path = ..io.joinpath(srvHttp.documentRoot,path) if(io.exist(path)){ io.remove(path); winform.txtMessage.print("已删除:" + path); response.close(); return; } } response.errorStatus(404); return; } fileData = request.postFileData() if(fileData){ io.createDir(..io.joinpath(srvHttp.documentRoot,"upload")) winform.txtMessage.print(..io.joinpath(srvHttp.documentRoot,"upload")) var fileName = ..io.joinpath(srvHttp.documentRoot,"upload",fileData.filepond.filename) var ok,err = fileData.filepond.save(fileName); if(!ok){ response.error(err); } winform.txtMessage.text = 'http服务端已启动: \n'; winform.txtMessage.print( srvHttp.getUrl(,true) + "/?t=" + srvHttp.userToken ); winform.txtMessage.print( "" ); winform.txtMessage.print( "上传成功:" + fileName ); response.contentType = "text/plain"; response.write("/upload/",fileData.filepond.filename) return response.close() } } if(!fsys.isDir(request.path) ) { if( ..io.exist(request.path) && (!_STUDIO_INVOKED || request.path!="/main.aardio") ) return response.loadcode(request.path) else { request.path = fsys.getParentDir(request.path) } } response.write(`