#!/usr/bin/env python

import libvirt
import libvirt_qemu
import threading
import time
import signal
import os
import sys

eventLoopThread = None

def eventLoopRun():
    while True:
        libvirt.virEventRunDefaultImpl()

def eventLoopStart():
    global eventLoopThread

    libvirt.virEventRegisterDefaultImpl()
    eventLoopThread = threading.Thread(target=eventLoopRun, name="libvirtEventLoop")
    eventLoopThread.setDaemon(True)
    eventLoopThread.start()


def reportDefault(conn, dom, eventName,eventArgs,opaque):
    print "DEFAULT EVENT: Domain %s(%s), pass the unknown event:%s, arguments is: %s" % (dom.name(), dom.ID(), eventName, eventArgs)

eventStrings = ( 
                 "RESUME",
                 "VNC_CONNECTED",
                 "VNC_DISCONNECTED",
                 "VNC_INITIALIZED",
                 "RESET",
                 "SHUTDOWN",
                 "HELLO" );
conn = libvirt.virConnect();
eventID = {};

def signal_handler(signal, frame):
    #print conn.getURI()
    if conn != None:
        print conn
        for i in eventID:
            print "deregister event: %d" %(i)
            #libvirt_qemu.domainQemuEventDeregister(conn1, i)
        print "test safely exit"
    else:
        print "conn is None"
    sys.exit(0)

def main():
    eventLoopStart()
    signal.signal(signal.SIGINT, signal_handler) 
    conn = libvirt.openReadOnly('qemu:///system')
    eventID[0] = libvirt_qemu.domainQemuEventRegister(conn, None, eventStrings[0], reportDefault, None)
    #eventID[1] = libvirt_qemu.domainQemuEventRegister(conn, None, eventStrings[1], reportDefault, None)
    #eventID[2] = libvirt_qemu.domainQemuEventRegister(conn, None, eventStrings[2], reportDefault, None)
    #eventID[3] = libvirt_qemu.domainQemuEventRegister(conn, None, eventStrings[3], reportDefault, None)
    #eventID[4] = libvirt_qemu.domainQemuEventRegister(conn, None, eventStrings[4], reportDefault, None)
    #eventID[5] = libvirt_qemu.domainQemuEventRegister(conn, None, eventStrings[5], reportDefault, None)
    #eventID[6] = libvirt_qemu.domainQemuEventRegister(conn, None, eventStrings[6], reportDefault, None)
    #eventID[7] = libvirt_qemu.domainQemuEventRegister(conn, None, 'SHUTDOWN', reportDefault, None)

    while 1:
        time.sleep(1)
        
if __name__ == "__main__":
    main()


