caller.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package go_zrfu
  2. import (
  3. "fmt"
  4. cbor "github.com/fxamacker/cbor/v2"
  5. )
  6. type ZRFUCaller struct {
  7. lib *ZRFUDyLib
  8. }
  9. func NewZRFUCaller(lib *ZRFUDyLib) (*ZRFUCaller, error) {
  10. c := &ZRFUCaller{
  11. lib: lib,
  12. }
  13. _, err := lib.procCall(lib.procPCInit)
  14. if err != nil {
  15. return nil, fmt.Errorf("error in init proc caller: %v", err)
  16. }
  17. return c, nil
  18. }
  19. func (c *ZRFUCaller) CallN(procName string) error {
  20. pnbv, err := NewBytesVec(c.lib)
  21. if err != nil {
  22. return fmt.Errorf("error in call proc: FuncName: NewBytesVec: %v", err)
  23. }
  24. defer pnbv.Close()
  25. cben := cbor.NewEncoder(pnbv)
  26. err = cben.Encode(procName)
  27. if err != nil {
  28. return fmt.Errorf("error in call proc: FuncName: CBOREncoding: %v", err)
  29. }
  30. _, err = c.lib.procCall(c.lib.procPCCall, pnbv.HandlePtr(), 0, 0)
  31. if err != nil {
  32. return fmt.Errorf("error in call proc: ProcCall: %v", err)
  33. }
  34. return nil
  35. }
  36. func (c *ZRFUCaller) CallAR(procName string, argData interface{}, retData interface{}) error {
  37. pnbv, err := NewBytesVec(c.lib)
  38. if err != nil {
  39. return fmt.Errorf("error in call proc: FuncName: NewBytesVec: %v", err)
  40. }
  41. defer pnbv.Close()
  42. argbv, err := NewBytesVec(c.lib)
  43. if err != nil {
  44. return fmt.Errorf("error in call proc: Args: NewBytesVec: %v", err)
  45. }
  46. defer argbv.Close()
  47. retbv, err := NewBytesVec(c.lib)
  48. if err != nil {
  49. return fmt.Errorf("error in call proc: RetVal: NewBytesVec: %v", err)
  50. }
  51. defer retbv.Close()
  52. cben := cbor.NewEncoder(pnbv)
  53. err = cben.Encode(procName)
  54. if err != nil {
  55. return fmt.Errorf("error in call proc: FuncName: CBOREncoding: %v", err)
  56. }
  57. argen := cbor.NewEncoder(argbv)
  58. err = argen.Encode(argData)
  59. if err != nil {
  60. return fmt.Errorf("error in call proc: Args: CBOREncoding: %v", err)
  61. }
  62. _, err = c.lib.procCall(c.lib.procPCCall, pnbv.HandlePtr(), argbv.HandlePtr(), retbv.HandlePtr())
  63. if err != nil {
  64. return fmt.Errorf("error in call proc: ProcCall: %v", err)
  65. }
  66. retde := cbor.NewDecoder(retbv)
  67. err = retde.Decode(retData)
  68. if err != nil {
  69. return fmt.Errorf("error in call proc: RetVal: CBORDecoding: %v", err)
  70. }
  71. return nil
  72. }
  73. func (c *ZRFUCaller) CallA(procName string, argData interface{}) error {
  74. pnbv, err := NewBytesVec(c.lib)
  75. if err != nil {
  76. return fmt.Errorf("error in call proc: FuncName: NewBytesVec: %v", err)
  77. }
  78. defer pnbv.Close()
  79. argbv, err := NewBytesVec(c.lib)
  80. if err != nil {
  81. return fmt.Errorf("error in call proc: Args: NewBytesVec: %v", err)
  82. }
  83. defer argbv.Close()
  84. cben := cbor.NewEncoder(pnbv)
  85. err = cben.Encode(procName)
  86. if err != nil {
  87. return fmt.Errorf("error in call proc: FuncName: CBOREncoding: %v", err)
  88. }
  89. argen := cbor.NewEncoder(argbv)
  90. err = argen.Encode(argData)
  91. if err != nil {
  92. return fmt.Errorf("error in call proc: Args: CBOREncoding: %v", err)
  93. }
  94. _, err = c.lib.procCall(c.lib.procPCCall, pnbv.HandlePtr(), argbv.HandlePtr(), 0)
  95. if err != nil {
  96. return fmt.Errorf("error in call proc: ProcCall: %v", err)
  97. }
  98. return nil
  99. }
  100. func (c *ZRFUCaller) CallR(procName string, retData interface{}) error {
  101. pnbv, err := NewBytesVec(c.lib)
  102. if err != nil {
  103. return fmt.Errorf("error in call proc: FuncName: NewBytesVec: %v", err)
  104. }
  105. defer pnbv.Close()
  106. retbv, err := NewBytesVec(c.lib)
  107. if err != nil {
  108. return fmt.Errorf("error in call proc: RetVal: NewBytesVec: %v", err)
  109. }
  110. defer retbv.Close()
  111. cben := cbor.NewEncoder(pnbv)
  112. err = cben.Encode(procName)
  113. if err != nil {
  114. return fmt.Errorf("error in call proc: FuncName: CBOREncoding: %v", err)
  115. }
  116. _, err = c.lib.procCall(c.lib.procPCCall, pnbv.HandlePtr(), 0, retbv.HandlePtr())
  117. if err != nil {
  118. return fmt.Errorf("error in call proc: ProcCall: %v", err)
  119. }
  120. retde := cbor.NewDecoder(retbv)
  121. err = retde.Decode(retData)
  122. if err != nil {
  123. return fmt.Errorf("error in call proc: RetVal: CBORDecoding: %v", err)
  124. }
  125. return nil
  126. }