func()

in internal/kernel/callbacks.go [129:161]


func (s *setCallback) handle(cookie string) (retval reflect.Value, err error) {
	client := GetClient()

	receiver := reflect.ValueOf(client.GetObject(s.ObjRef))
	if strings.HasPrefix(cookie, ".") {
		// Ready to catch an error if the access panics...
		defer func() {
			if r := recover(); r != nil {
				if err == nil {
					var ok bool
					if err, ok = r.(error); !ok {
						err = fmt.Errorf("%v", r)
					}
				} else {
					// This is not expected - so we panic!
					panic(r)
				}
			}
		}()

		// Need to access the underlying struct...
		receiver = receiver.Elem()
		field := receiver.FieldByName(cookie[1:])
		meta, _ := receiver.Type().FieldByName(cookie[1:])

		field.Set(convert(reflect.ValueOf(s.Value), meta.Type))
		// Both retval & err are set to zero values here...
		return
	} else {
		method := receiver.MethodByName(fmt.Sprintf("Set%v", cookie))
		return client.invoke(method, []interface{}{s.Value})
	}
}