Terminal changes.
This commit is contained in:
		
							parent
							
								
									0bc24e8d2e
								
							
						
					
					
						commit
						c2d9af807a
					
				| @ -16,6 +16,7 @@ class TerminalSession: | ||||
|     def __init__(self,command): | ||||
|         self.master, self.slave = pty.openpty() | ||||
|         self.sockets =[] | ||||
|         self.buffer = b'' | ||||
|         self.process = subprocess.Popen( | ||||
|             command.split(" "), | ||||
|             stdin=self.slave, | ||||
| @ -29,17 +30,30 @@ class TerminalSession: | ||||
|         loop = asyncio.get_event_loop() | ||||
|         self.sockets.append(ws) | ||||
|         if len(self.sockets) > 1: | ||||
|             start = self.buffer.index(b'\n') | ||||
|             await ws.send_bytes(self.buffer[start:]) | ||||
|             return  | ||||
|         while True: | ||||
|             try: | ||||
|                 data = await loop.run_in_executor(None, os.read, self.master, 1024) | ||||
|                 if not data: | ||||
|                     break | ||||
|                 self.buffer += data | ||||
|                 if len(self.buffer) > 10000: | ||||
|                     self.buffer = self.buffer[:-10000] | ||||
|                 try: | ||||
|                     for ws in self.sockets: await ws.send_bytes(data)  # Send raw bytes for ANSI support | ||||
|                 except: | ||||
|                     self.sockets.remove(ws) | ||||
|             except Exception: | ||||
|                 print("Terminating process") | ||||
|                 self.process.terminate() | ||||
|                 print("Terminated process") | ||||
|                 for ws in self.sockets: | ||||
|                     try: | ||||
|                         await ws.close() | ||||
|                     except Exception: | ||||
|                         pass | ||||
|                 break | ||||
| 
 | ||||
|     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-addon-fit/lib/xterm-addon-fit.js"></script> | ||||
|     <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> | ||||
| 
 | ||||
|   <div class="container" id="terminal"></div> | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user