feat: migrate paqctl to self-hosted Gitea (git.samnet.dev)
All repository URLs updated from GitHub (SamNet-dev/paqctl) to Gitea (git.samnet.dev/SamNet-dev/paqctl). Third-party references (hanselime/paqet, Xray, microsocks) remain on GitHub.
This commit is contained in:
84
gfk/client/mainclient.py
Normal file
84
gfk/client/mainclient.py
Normal file
@@ -0,0 +1,84 @@
|
||||
import subprocess
|
||||
import os
|
||||
import time
|
||||
import sys
|
||||
import signal
|
||||
import platform
|
||||
|
||||
IS_WINDOWS = platform.system() == 'Windows'
|
||||
|
||||
scripts = ['quic_client.py', 'vio_client.py']
|
||||
|
||||
|
||||
def kill_existing_script(script_name):
|
||||
"""Kill any existing instance of the script (cross-platform)"""
|
||||
if IS_WINDOWS:
|
||||
# On Windows, use taskkill to find and kill python processes
|
||||
try:
|
||||
result = subprocess.run(
|
||||
['wmic', 'process', 'where',
|
||||
f"commandline like '%{script_name}%' and name like '%python%'",
|
||||
'get', 'processid'],
|
||||
capture_output=True, text=True, stderr=subprocess.DEVNULL
|
||||
)
|
||||
for line in result.stdout.split('\n'):
|
||||
line = line.strip()
|
||||
if line.isdigit():
|
||||
subprocess.run(['taskkill', '/F', '/PID', line],
|
||||
stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL)
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
subprocess.run(['pkill', '-f', script_name], stderr=subprocess.DEVNULL)
|
||||
|
||||
|
||||
def run_script(script_name):
|
||||
"""Start a script, killing any existing instance first"""
|
||||
kill_existing_script(script_name)
|
||||
time.sleep(0.5)
|
||||
|
||||
if IS_WINDOWS:
|
||||
p = subprocess.Popen([sys.executable, script_name],
|
||||
creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)
|
||||
else:
|
||||
p = subprocess.Popen([sys.executable, script_name])
|
||||
return p
|
||||
|
||||
|
||||
processes = []
|
||||
|
||||
|
||||
def signal_handler(sig, frame):
|
||||
print('\nShutting down GFK client...')
|
||||
for p in processes:
|
||||
try:
|
||||
p.terminate()
|
||||
p.wait(timeout=3)
|
||||
except Exception:
|
||||
try:
|
||||
p.kill()
|
||||
except Exception:
|
||||
pass
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
if not IS_WINDOWS:
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
|
||||
print("Starting GFK client...")
|
||||
p1 = run_script(scripts[0])
|
||||
time.sleep(1)
|
||||
p2 = run_script(scripts[1])
|
||||
processes.extend([p1, p2])
|
||||
|
||||
print("GFK running. Press Ctrl+C to stop.\n")
|
||||
|
||||
try:
|
||||
p1.wait()
|
||||
p2.wait()
|
||||
print("All subprocesses have completed.")
|
||||
except KeyboardInterrupt:
|
||||
signal_handler(None, None)
|
||||
|
||||
Reference in New Issue
Block a user