Terminal changes.
This commit is contained in:
		
							parent
							
								
									0bc24e8d2e
								
							
						
					
					
						commit
						c2d9af807a
					
				@ -16,6 +16,7 @@ class TerminalSession:
 | 
				
			|||||||
    def __init__(self,command):
 | 
					    def __init__(self,command):
 | 
				
			||||||
        self.master, self.slave = pty.openpty()
 | 
					        self.master, self.slave = pty.openpty()
 | 
				
			||||||
        self.sockets =[]
 | 
					        self.sockets =[]
 | 
				
			||||||
 | 
					        self.buffer = b''
 | 
				
			||||||
        self.process = subprocess.Popen(
 | 
					        self.process = subprocess.Popen(
 | 
				
			||||||
            command.split(" "),
 | 
					            command.split(" "),
 | 
				
			||||||
            stdin=self.slave,
 | 
					            stdin=self.slave,
 | 
				
			||||||
@ -29,17 +30,30 @@ class TerminalSession:
 | 
				
			|||||||
        loop = asyncio.get_event_loop()
 | 
					        loop = asyncio.get_event_loop()
 | 
				
			||||||
        self.sockets.append(ws)
 | 
					        self.sockets.append(ws)
 | 
				
			||||||
        if len(self.sockets) > 1:
 | 
					        if len(self.sockets) > 1:
 | 
				
			||||||
 | 
					            start = self.buffer.index(b'\n')
 | 
				
			||||||
 | 
					            await ws.send_bytes(self.buffer[start:])
 | 
				
			||||||
            return 
 | 
					            return 
 | 
				
			||||||
        while True:
 | 
					        while True:
 | 
				
			||||||
            try:
 | 
					            try:
 | 
				
			||||||
                data = await loop.run_in_executor(None, os.read, self.master, 1024)
 | 
					                data = await loop.run_in_executor(None, os.read, self.master, 1024)
 | 
				
			||||||
                if not data:
 | 
					                if not data:
 | 
				
			||||||
                    break
 | 
					                    break
 | 
				
			||||||
 | 
					                self.buffer += data
 | 
				
			||||||
 | 
					                if len(self.buffer) > 10000:
 | 
				
			||||||
 | 
					                    self.buffer = self.buffer[:-10000]
 | 
				
			||||||
                try:
 | 
					                try:
 | 
				
			||||||
                    for ws in self.sockets: await ws.send_bytes(data)  # Send raw bytes for ANSI support
 | 
					                    for ws in self.sockets: await ws.send_bytes(data)  # Send raw bytes for ANSI support
 | 
				
			||||||
                except:
 | 
					                except:
 | 
				
			||||||
                    self.sockets.remove(ws)
 | 
					                    self.sockets.remove(ws)
 | 
				
			||||||
            except Exception:
 | 
					            except Exception:
 | 
				
			||||||
 | 
					                print("Terminating process")
 | 
				
			||||||
 | 
					                self.process.terminate()
 | 
				
			||||||
 | 
					                print("Terminated process")
 | 
				
			||||||
 | 
					                for ws in self.sockets:
 | 
				
			||||||
 | 
					                    try:
 | 
				
			||||||
 | 
					                        await ws.close()
 | 
				
			||||||
 | 
					                    except Exception:
 | 
				
			||||||
 | 
					                        pass
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async def write_input(self, data):
 | 
					    async def write_input(self, data):
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,8 @@
 | 
				
			|||||||
    <script src="https://cdn.jsdelivr.net/npm/xterm/lib/xterm.js"></script>
 | 
					    <script src="https://cdn.jsdelivr.net/npm/xterm/lib/xterm.js"></script>
 | 
				
			||||||
    <script src="https://cdn.jsdelivr.net/npm/xterm-addon-fit/lib/xterm-addon-fit.js"></script>
 | 
					    <script src="https://cdn.jsdelivr.net/npm/xterm-addon-fit/lib/xterm-addon-fit.js"></script>
 | 
				
			||||||
    <style>
 | 
					    <style>
 | 
				
			||||||
       #terminal { width: 100%; height: 480px; overflow-y: none; }
 | 
					       #terminal { margin-right: 5%; width: 90%; height: 90%; overflow-y: none; }
 | 
				
			||||||
 | 
					       #terminal::-webkit-scrollbar { display: none; }
 | 
				
			||||||
    </style>
 | 
					    </style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <div class="container" id="terminal"></div>
 | 
					  <div class="container" id="terminal"></div>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user