Mercurial > MadButterfly
view nodejs/examples/mce/epg.js @ 986:c39d14139ca5 refine_backend_if
Implement IO manager interface for X
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Mon, 22 Nov 2010 00:42:29 +0800 |
parents | bd9b0142fc7e |
children | 18329b6f77a4 |
line wrap: on
line source
// -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- // vim: sw=4:ts=8:sts=4 var http = require('http'); var URL = require('url'); var sys = require("sys"); var fs = require("fs"); var os = require("child_process"); function EPG() { var epgsrv = http.createClient(8080, '211.23.50.144'); var cmd = '{"Protocol":"EPG-CSP","Command":"SearchRequest","ProgramCat":"MainCat"}'; var headers={ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Host':'211.23.50.144:8080', 'User-Agent':'MadButterfly', 'Content-Type':'application/x-www-form-urlencoded' }; headers['Content-Length'] = cmd.length; var request = epgsrv.request('POST', '/IPTV_EPG/EPGService.do?timestamp='+new Date().getTime(),headers); var self = this; sys.puts("aaaa"); var js = ''; request.write(cmd); request.end(); request.on('response', function(res) { sys.puts("connected"); res.on('data',function (data) { js = js + data; }); res.on('end', function () { res = JSON.parse(js); sys.puts("parsed"); self.onLoad(res); }); }); } /** * Check if the file has been cached. Create a symbolic to link if it is cached already. * */ function isCached(cachepath,file,obj) { var fields = cachepath.split('.'); try { var ext = fields.pop(); var pngfile = cachepath; sys.puts("ext="+ext); if (ext != 'png') { fields.push('png'); pngfile = fields.join('.'); } var st = fs.statSync(pngfile); try { fs.unlinkSync(file); } catch(e) { } fs.linkSync(pngfile, file); obj.pend = obj.pend - 1; if (obj.pend == 0) { obj.onInitDone(); } return 1; } catch(e) { sys.puts(e); } return 0; } /** * Implement the mkdir -p to create the directory */ function CreateDirectory(cachepath) { var fields = cachepath.split('/'); var p=''; for(i=0;i<fields.length-1;i++) { p = p + fields[i]+'/'; try { fs.mkdirSync(p,0777); } catch(e) { } } } /* * We will check the cache directory. If the file is available, we will create a symbolic link only. Otherwise, * we will fetch it before create the symbolic link. */ function httpGetFile(url,file,obj) { sys.puts("fetch "+ file); var u = URL.parse(url); var cachepath = 'cache/'+u.pathname; if (isCached(cachepath,file,obj)) return; CreateDirectory(cachepath); // Fetch file from the server and convert it tyo PNG if it is not PNG format. var f = fs.openSync(cachepath,'w'); sys.puts("f="+f); var headers={ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Host':'211.23.50.144:8080', 'User-Agent':'MadButterfly', 'Content-Type':'application/x-www-form-urlencoded' }; sys.puts("host="+u.host+' '+u.port+' '+u.pathname); for(k in u) { sys.puts(k+"--->"+u[k]); } var c = http.createClient(8080,'211.23.50.144'); var req = c.request('GET',u.pathname,headers); req.end(); req.on('response', function(res) { res.on('data',function(data) { fs.writeSync(f,data,0,data.length); }); res.on('end',function() { fs.close(f); var fields = cachepath.split('.'); var ext = fields.pop(); if (ext != "png") { fields.push("png"); newf = fields.join("."); os.spawn("convert",[file,newf]); } else { newf = cachepath; } try { fs.unlinkSync(file); } catch(e) { } sys.puts("end of "+cachepath+" to "+file); fs.symlinkSync(newf, file); obj.pend = obj.pend - 1; if (obj.pend == 0) { obj.onInitDone(); } }); }); } EPG.prototype.onLoad = function(res) { cats = res['ProgramCat']; this.pend = cats.length; for (i in cats) { c = cats[i]; httpGetFile(c['ProgramPIC'],'cat'+i+'.png',this); } } EPG.prototype.onInitDone=function() { if (this.loadCallback) this.loadCallback(); } EPG.prototype.registerInitDone=function(cb) { this.loadCallback = cb; } exports.EPG = EPG;