in main.go [499:565]
func convertEventPy(eventPy *C.PyObject) (event gymvnc.VNCEvent, ok bool) {
// eventPy: ("PointerEvent", x, y, buttonmask) or ("KeyEvent", key, down)
// if PyTuple_Check(eventPy) == 0 {
// setError(errors.New("event was not a tuple"))
// ok = false
// return
// }
t := C.PyTuple_GetItem(eventPy, C.Py_ssize_t(0))
if t == nil {
C.PyErr_Clear()
repr, isOk := PyObject_Repr(eventPy)
if !isOk {
return
}
setError(errors.Errorf("Expected non-empty tuple rather than: %s", repr))
return
}
eventType, isOk := GoString_FromPyString(t)
if !isOk {
return
}
if eventType == "PointerEvent" {
x, isOk := getIntFromTuple(eventPy, 1)
if !isOk {
return
}
y, isOk := getIntFromTuple(eventPy, 2)
if !isOk {
return
}
mask, isOk := getIntFromTuple(eventPy, 3)
if !isOk {
return
}
event = gymvnc.PointerEvent{
Mask: vncclient.ButtonMask(mask),
X: uint16(x),
Y: uint16(y),
}
} else if eventType == "KeyEvent" {
keysym, isOk := getIntFromTuple(eventPy, 1)
if !isOk {
return
}
down, isOk := getBoolFromTuple(eventPy, 2)
if !isOk {
return
}
event = gymvnc.KeyEvent{
Keysym: uint32(keysym),
Down: down,
}
} else {
setError(errors.Errorf("invalid event type: %s", eventType))
}
ok = true
return
}