From: Quentin Smith Date: Tue, 11 Aug 2009 05:15:07 +0000 (-0400) Subject: Allow reconnecting to the same terminal session X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/commitdiff_plain/0dad430c014913f47e900590cae35bf238a625e5 Allow reconnecting to the same terminal session svn path=/package_branches/invirt-web/ajaxterm-rebased/; revision=2753 --- diff --git a/code/ajaxterm.py b/code/ajaxterm.py index dd7e5b8..8436914 100644 --- a/code/ajaxterm.py +++ b/code/ajaxterm.py @@ -320,7 +320,7 @@ class Terminal: return r def dumplatin1(self): return self.dump().translate(self.trl1) - def dumphtml(self,color=1): + def dumphtml(self,color=1,force=False): h=self.height w=self.width r="" @@ -343,7 +343,7 @@ class Terminal: if i%w==w-1: span+='\n' r='
%s
'%r - if self.last_html==r: + if self.last_html==r and not force: return '' else: self.last_html=r @@ -436,9 +436,9 @@ class Multiplex: os.write(fd,s) except (IOError,OSError): self.proc_kill(fd) - def dump(self,fd,color=1): + def dump(self,fd,color=1,force=False): try: - return self.proc[fd]['term'].dumphtml(color) + return self.proc[fd]['term'].dumphtml(color, force) except KeyError: return False def loop(self): diff --git a/code/main.py b/code/main.py index 10e282f..77646c9 100755 --- a/code/main.py +++ b/code/main.py @@ -407,7 +407,7 @@ console will suffer artifacts. return d @cherrypy.expose - def at(self, machine_id, k=None, c=0): + def at(self, machine_id, k=None, c=0, force=0): machine = validation.Validate(cherrypy.request.login, cherrypy.request.state, machine_id=machine_id).machine if machine_id in self.atsessions: term = self.atsessions[machine_id] @@ -419,11 +419,12 @@ console will suffer artifacts. if k: self.atmulti.proc_write(term,k) time.sleep(0.002) - dump=self.atmulti.dump(term,c) + dump=self.atmulti.dump(term,c,int(force)) cherrypy.response.headers['Content-Type']='text/xml' if isinstance(dump,str): return dump else: + print "Removing session for", machine_id del self.atsessions[machine_id] return '' diff --git a/code/static/ajaxterm/ajaxterm.js b/code/static/ajaxterm/ajaxterm.js index d876861..9089a96 100644 --- a/code/static/ajaxterm/ajaxterm.js +++ b/code/static/ajaxterm/ajaxterm.js @@ -12,6 +12,7 @@ ajaxterm.Terminal_ctor=function(id,machine_id) { var keybuf=[]; var sending=0; var rmax=1; + var force=true; var div=document.getElementById(id); var dstat=document.createElement('pre'); @@ -102,6 +103,10 @@ ajaxterm.Terminal_ctor=function(id,machine_id) { send+=keybuf.pop(); } var query=query1+send; + if (force) { + query=query+"&force=1"; + force=false; + } if(opt_get.className=='on') { r.open("GET",base_path+"?"+query,true); if(ie) { @@ -269,6 +274,7 @@ ajaxterm.Terminal_ctor=function(id,machine_id) { } document.onkeypress=keypress; document.onkeydown=keydown; + force=true; timeout=window.setTimeout(update,100); } init();