1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
package service
import (
"github.com/godbus/dbus/v5"
log "github.com/sirupsen/logrus"
)
// Set the Read callback, called when a client attempt to read
func (s *Descr) OnRead(fx DescrReadCallback) *Descr {
s.readCallback = fx
return s
}
// Set the Write callback, called when a client attempt to write
func (s *Descr) OnWrite(fx DescrWriteCallback) *Descr {
s.writeCallback = fx
return s
}
//ReadValue read a value
func (s *Descr) ReadValue(options map[string]interface{}) ([]byte, *dbus.Error) {
log.Trace("Descr.ReadValue")
if s.readCallback != nil {
b, err := s.readCallback(s, options)
if err != nil {
return nil, dbus.MakeFailedError(err)
}
return b, nil
}
return s.Properties.Value, nil
}
//WriteValue write a value
func (s *Descr) WriteValue(value []byte, options map[string]interface{}) *dbus.Error {
log.Trace("Descr.WriteValue")
val := value
if s.writeCallback != nil {
log.Trace("Used write callback")
b, err := s.writeCallback(s, value)
val = b
if err != nil {
return dbus.MakeFailedError(err)
}
} else {
log.Trace("Store directly to value (no callback)")
}
// TODO update on Properties interface
s.Properties.Value = val
err := s.iprops.Instance().Set(s.Interface(), "Value", dbus.MakeVariant(value))
return err
}
|