First commit
This commit is contained in:
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
numpy
|
||||
51
simulator.py
Normal file
51
simulator.py
Normal file
@@ -0,0 +1,51 @@
|
||||
import numpy as np
|
||||
import subprocess
|
||||
|
||||
class EmulatorSimulator:
|
||||
def __init__(self, vm_name: str, username: str, password: str, snapshot_name: str = "snapshot"):
|
||||
self.vm_name = vm_name
|
||||
self.username = username
|
||||
self.password = password
|
||||
self.snapshot_name = snapshot_name
|
||||
self.execute_command(["VBoxManage", "startvm", self.vm_name])
|
||||
pass
|
||||
|
||||
def _execute_command(self, command: list[str]) -> None:
|
||||
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
stdout, stderr = process.communicate()
|
||||
if process.returncode != 0:
|
||||
print(f"Error executing command: {command}")
|
||||
print(stderr.decode())
|
||||
return None
|
||||
else:
|
||||
return stdout.decode()
|
||||
|
||||
def _execute_xdotool_command(self, command: list[str]) -> None:
|
||||
command_prefix = ["VBoxManage", "guestcontrol", self.vm_name, "run",
|
||||
"--exe", "/usr/bin/xdotool", "--username", self.username,
|
||||
"--password", self.password, "--"]
|
||||
self._execute_command(command_prefix + command)
|
||||
|
||||
def get_logs(self) -> str:
|
||||
pass
|
||||
|
||||
def load_state(self) -> None:
|
||||
self._execute_command(["VBoxManage", "snapshot", self.vm_name, "restore", self.snapshot_name])
|
||||
|
||||
def save_state(self) -> None:
|
||||
self._execute_command(["VBoxManage", "snapshot", self.vm_name, "take", self.snapshot_name])
|
||||
|
||||
def send_click(self, click: int) -> None:
|
||||
self._execute_xdotool_command(["click", str(click)])
|
||||
|
||||
def send_key(self) -> None:
|
||||
pass
|
||||
|
||||
def mouse_move(self, x: int, y: int) -> None:
|
||||
self._execute_xdotool_command(["mousemove", str(x), str(y),])
|
||||
|
||||
def get_screenshot(self) -> np.ndarray:
|
||||
self._execute_command(["VBoxManage", "controlvm", self.vm_name, "screenshotpng", "./"])
|
||||
|
||||
def close(self) -> None:
|
||||
pass
|
||||
Reference in New Issue
Block a user