Ranoosh / launcher.py
mrwabnalas40's picture
Upload 45 files
889459c verified
#!/usr/bin/env python3
"""
مشغل موحد لنظام توزيع المهام
يوفر خيارات متعددة للتشغيل
"""
import sys
import os
import subprocess
import argparse
import time
from pathlib import Path
from peer_discovery import PORT
def check_requirements():
"""فحص المتطلبات والاعتماديات"""
required_files = [
'background_service.py',
'main.py',
'peer_server.py',
'rpc_server.py',
'load_balancer.py'
]
missing_files = []
for file in required_files:
if not Path(file).exists():
missing_files.append(file)
if missing_files:
print(f"❌ ملفات مفقودة: {', '.join(missing_files)}")
return False
return True
def install_tray_dependencies():
"""تثبيت اعتماديات أيقونة شريط النظام"""
try:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'pystray', 'Pillow'])
print("✅ تم تثبيت اعتماديات أيقونة شريط النظام")
return True
except subprocess.CalledProcessError:
print("❌ فشل في تثبيت اعتماديات أيقونة شريط النظام")
return False
def start_background_service():
"""بدء تشغيل الخدمة في الخلفية"""
print("🚀 بدء تشغيل الخدمة في الخلفية...")
# تشغيل الخدمة الخلفية
process = subprocess.Popen(
[sys.executable, 'background_service.py', 'start'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
# انتظار قليل للتأكد من بدء التشغيل
time.sleep(2)
if process.poll() is None:
print("✅ تم بدء تشغيل الخدمة الخلفية بنجاح")
return process
else:
print("❌ فشل في بدء تشغيل الخدمة الخلفية")
return None
def start_with_tray():
"""تشغيل النظام مع أيقونة شريط النظام"""
print("🖱️ تشغيل النظام مع أيقونة شريط النظام...")
# بدء الخدمة الخلفية أولاً
bg_process = start_background_service()
if not bg_process:
return False
time.sleep(3) # انتظار حتى تصبح الخدمة جاهزة
try:
# تشغيل أيقونة شريط النظام
subprocess.run([sys.executable, 'system_tray.py'])
except KeyboardInterrupt:
print("\n🛑 إيقاف النظام...")
# إيقاف الخدمة الخلفية
try:
import requests
requests.post('http://localhost:8888/stop', timeout=5)
except:
bg_process.terminate()
return True
def start_interactive():
"""تشغيل النظام في الوضع التفاعلي"""
print("🖥️ تشغيل النظام في الوضع التفاعلي...")
# بدء الخدمة الخلفية
bg_process = start_background_service()
if not bg_process:
return False
time.sleep(3)
# تشغيل الواجهة التفاعلية
try:
import requests
requests.post('http://localhost:8888/show-ui', timeout=5)
print("✅ تم تشغيل الواجهة التفاعلية")
# فتح المتصفح
import webbrowser
time.sleep(2)
webbrowser.open('http://localhost:5173')
# انتظار إنهاء المستخدم
input("اضغط Enter لإيقاف النظام...")
except KeyboardInterrupt:
pass
finally:
print("🛑 إيقاف النظام...")
try:
import requests
requests.post('http://localhost:8888/stop', timeout=5)
except:
bg_process.terminate()
return True
def start_headless():
"""تشغيل النظام بدون واجهة (للخوادم)"""
print("⚙️ تشغيل النظام بدون واجهة...")
try:
# تشغيل الخدمة الخلفية والانتظار
subprocess.run([sys.executable, 'background_service.py', 'start'])
except KeyboardInterrupt:
print("\n🛑 إيقاف النظام...")
return True
def show_status():
"""عرض حالة النظام"""
subprocess.run([sys.executable, 'background_service.py', 'status'])
def stop_system():
"""إيقاف النظام"""
subprocess.run([sys.executable, 'background_service.py', 'stop'])
def main():
parser = argparse.ArgumentParser(
description="مشغل نظام توزيع المهام الذكي",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
أمثلة الاستخدام:
python launcher.py --tray # تشغيل مع أيقونة شريط النظام
python launcher.py --interactive # تشغيل تفاعلي مع واجهة
python launcher.py --headless # تشغيل بدون واجهة (للخوادم)
python launcher.py --status # عرض حالة النظام
python launcher.py --stop # إيقاف النظام
"""
)
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--tray', action='store_true',
help='تشغيل مع أيقونة شريط النظام')
group.add_argument('--interactive', action='store_true',
help='تشغيل تفاعلي مع واجهة')
group.add_argument('--headless', action='store_true',
help='تشغيل بدون واجهة (للخوادم)')
group.add_argument('--status', action='store_true',
help='عرض حالة النظام')
group.add_argument('--stop', action='store_true',
help='إيقاف النظام')
parser.add_argument('--install-deps', action='store_true',
help='تثبيت الاعتماديات المطلوبة')
args = parser.parse_args()
# فحص المتطلبات
if not check_requirements():
return 1
# تثبيت الاعتماديات إذا طُلب ذلك
if args.install_deps:
install_tray_dependencies()
return 0
# تنفيذ الأمر المطلوب
if args.status:
show_status()
elif args.stop:
stop_system()
elif args.headless:
success = start_headless()
elif args.interactive:
success = start_interactive()
elif args.tray:
# تثبيت اعتماديات أيقونة شريط النظام إذا لم تكن موجودة
try:
import pystray
except ImportError:
print("📦 تثبيت اعتماديات أيقونة شريط النظام...")
if not install_tray_dependencies():
print("❌ فشل في تثبيت الاعتماديات، التشغيل في الوضع التفاعلي...")
success = start_interactive()
else:
success = start_with_tray()
else:
success = start_with_tray()
return 0 if success else 1
if __name__ == "__main__":
sys.exit(main())