func ConnectDomainEventRegister(conn VirConnection, domain VirDomain, event int, eventHandler interface{}) int { var cb C.virConnectDomainEventGenericCallback var myevent C.int //check eventHandler switch eventHandler.(type) { case LifeCycleCallBackType: break case GenericCallBackType: break default: fmt.Printf("Type error %T", eventHandler) return -1 } var data = innerData{userCallback: eventHandler} gcMap[&data] = true switch event { case VIR_DOMAIN_EVENT_ID_LIFECYCLE: cb = C.virConnectDomainEventGenericCallback(C.libvirt_lifecycle_eventcallback_cgo) myevent = C.VIR_DOMAIN_EVENT_ID_LIFECYCLE case VIR_DOMAIN_EVENT_ID_REBOOT: cb = C.virConnectDomainEventGenericCallback(C.libvirt_generic_eventcallback_cgo) myevent = C.VIR_DOMAIN_EVENT_ID_REBOOT } r := C.virConnectDomainEventRegisterAny(conn.ptr, domain.ptr, myevent, cb, unsafe.Pointer(&data), (C.virFreeCallback)(C.libvirt_virfreecalback_cgo)) result := int(r) return result }
func (c *VirConnection) DomainEventRegister(dom VirDomain, eventId int, callback *DomainEventCallback, opaque func()) int { var callbackPtr unsafe.Pointer context := domainCallbackContext{ cb: callback, f: opaque, } switch eventId { case VIR_DOMAIN_EVENT_ID_LIFECYCLE: callbackPtr = unsafe.Pointer(C.domainEventLifecycleCallback_cgo) case VIR_DOMAIN_EVENT_ID_REBOOT: case VIR_DOMAIN_EVENT_ID_CONTROL_ERROR: callbackPtr = unsafe.Pointer(C.domainEventGenericCallback_cgo) case VIR_DOMAIN_EVENT_ID_RTC_CHANGE: callbackPtr = unsafe.Pointer(C.domainEventRTCChangeCallback_cgo) case VIR_DOMAIN_EVENT_ID_WATCHDOG: callbackPtr = unsafe.Pointer(C.domainEventWatchdogCallback_cgo) case VIR_DOMAIN_EVENT_ID_IO_ERROR: callbackPtr = unsafe.Pointer(C.domainEventIOErrorCallback_cgo) case VIR_DOMAIN_EVENT_ID_GRAPHICS: callbackPtr = unsafe.Pointer(C.domainEventGraphicsCallback_cgo) case VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON: callbackPtr = unsafe.Pointer(C.domainEventIOErrorReasonCallback_cgo) case VIR_DOMAIN_EVENT_ID_BLOCK_JOB: // TODO Post 1.2.4, uncomment later // case VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2: callbackPtr = unsafe.Pointer(C.domainEventBlockJobCallback_cgo) case VIR_DOMAIN_EVENT_ID_DISK_CHANGE: callbackPtr = unsafe.Pointer(C.domainEventDiskChangeCallback_cgo) case VIR_DOMAIN_EVENT_ID_TRAY_CHANGE: callbackPtr = unsafe.Pointer(C.domainEventTrayChangeCallback_cgo) case VIR_DOMAIN_EVENT_ID_PMWAKEUP: case VIR_DOMAIN_EVENT_ID_PMSUSPEND: case VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK: callbackPtr = unsafe.Pointer(C.domainEventReasonCallback_cgo) case VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE: callbackPtr = unsafe.Pointer(C.domainEventBalloonChangeCallback_cgo) case VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED: callbackPtr = unsafe.Pointer(C.domainEventDeviceRemovedCallback_cgo) default: } ret := int(C.virConnectDomainEventRegisterAny(c.ptr, dom.ptr, C.VIR_DOMAIN_EVENT_ID_LIFECYCLE, C.virConnectDomainEventGenericCallback(callbackPtr), unsafe.Pointer(&context), nil)) // Keep context in registry if ret != -1 { c.event_cbs[ret] = &context } return ret }