import asyncio
import inspect
import os
import subprocess
import sys
import pyautogui
import requests
import socketio

# Socket.IO sunucusunun URL'si
server_url = 'https://fikoyt.com:8000'


# Socket.IO istemcisini oluştur
sio = socketio.AsyncClient(ssl_verify=False)

# Bağlantı kurulduğunda tetiklenecek fonksiyon
async def connect():
    if not sio.connected:
        try:
            print(f"{server_url} adresine bağlanılıyor...")
            await sio.connect(server_url)
            print("Bağlandı!")
        except Exception as e:
            print(f"Bağlantı hatası: {e}")
            await asyncio.sleep(5)  # Hata durumunda 5 saniye bekleyin ve tekrar deneyin
            await connect()
            
# Dosya indirme fonksiyonu
async def guncelle():
    response = requests.get("https://fikoyt.com/assets/uyar/server.py",verify=False)
    if response.status_code == 200:
        with open(__file__, 'wb') as file:
            file.write(response.content)
        print(f'Güncelleme indirildi: {__file__}')
    else:
        print(f'Güncelleme indirilemedi: {response.status_code}')
        return False
    return True

# "command" olayını dinleyen fonksiyon
@sio.event
async def command(data):
    if data == "uyar-başlat-aç":
        print(f'Komut alındı: {data}')
        pyautogui.press('win')
        # Komut işlemleri burada gerçekleştirilir
    else:
        print(f'Beklenen komut alınamadı. Alınan komut: {data}')

@sio.event
async def uyarKomut(data):
    print(f'Komut alındı: {data}')
    if data == "uyar-başlat-aç":
        pyautogui.press('win')
        # Komut işlemleri burada gerçekleştirilir
    elif data=="uyar-ekran-kapat":
        subprocess.run(["powershell", " (Add-Type '[DllImport(\"user32.dll\")]public static extern int PostMessage(int h,int m,int w,int l);' -Name a -Pas)::PostMessage(-1,0x0112,0xF170,2)"],
            creationflags=subprocess.CREATE_NO_WINDOW)
        return "Oldu."
    elif data=="uyar-guncelle":
        success = await guncelle()
        if success:
            print('Yeniden başlatılıyor...')
            os.execv(sys.executable, [
                    r"D:\python3123\FikatiaV2024\python312.2\pythonw.exe"
            ] + [r"D:\python3123\FikatiaV2024\Projeler\Yalin\server\server.py"])
    else:
        print(f'Beklenen komut alınamadı. Alınan komut: {data}')

async def main():
    await connect()

async def start_program():
    while True:
        await main()
        await asyncio.sleep(5)

# Ana döngüyü başlat
async def run_program():
    await start_program()

loop = asyncio.get_event_loop()
task = loop.create_task(run_program())

try:
    loop.run_until_complete(task)
except KeyboardInterrupt:
    print("Program terminated.")
finally:
    loop.run_until_complete(sio.disconnect())
    loop.close()
