example_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package handler_test
  2. import (
  3. "fmt"
  4. "leafstalk/module/handler"
  5. "sync"
  6. "time"
  7. )
  8. func Example() {
  9. s := handler.NewServer(10)
  10. var wg sync.WaitGroup
  11. wg.Add(1)
  12. // goroutine 1
  13. go func() {
  14. s.Register("f0", func(args []interface{}) {
  15. })
  16. s.Register("f1", func(args []interface{}) interface{} {
  17. return 1
  18. })
  19. s.Register("fn", func(args []interface{}) []interface{} {
  20. return []interface{}{1, 2, 3}
  21. })
  22. s.Register("add", func(args []interface{}) interface{} {
  23. n1 := args[0].(int)
  24. n2 := args[1].(int)
  25. return n1 + n2
  26. })
  27. wg.Done()
  28. for {
  29. s.Exec(<-s.ChanCall)
  30. }
  31. }()
  32. wg.Wait()
  33. wg.Add(1)
  34. // goroutine 2
  35. go func() {
  36. c := s.Open(10)
  37. // sync
  38. err := c.Call0("f0")
  39. if err != nil {
  40. fmt.Println(err)
  41. }
  42. r1, err := c.Call1("f1")
  43. if err != nil {
  44. fmt.Println(err)
  45. } else {
  46. fmt.Println(r1)
  47. }
  48. rn, err := c.CallN("fn")
  49. if err != nil {
  50. fmt.Println(err)
  51. } else {
  52. fmt.Println(rn[0], rn[1], rn[2])
  53. }
  54. ra, err := c.Call1("add", 1, 2)
  55. if err != nil {
  56. fmt.Println(err)
  57. } else {
  58. fmt.Println(ra)
  59. }
  60. // asyn
  61. c.AsynCall("f0", func(err error) {
  62. if err != nil {
  63. fmt.Println(err)
  64. }
  65. })
  66. c.AsynCall("f1", func(ret interface{}, err error) {
  67. if err != nil {
  68. fmt.Println(err)
  69. } else {
  70. fmt.Println(ret)
  71. }
  72. })
  73. c.AsynCall("fn", func(ret []interface{}, err error) {
  74. if err != nil {
  75. fmt.Println(err)
  76. } else {
  77. fmt.Println(ret[0], ret[1], ret[2])
  78. }
  79. })
  80. c.AsynCall("add", 1, 2, func(ret interface{}, err error) {
  81. if err != nil {
  82. fmt.Println(err)
  83. } else {
  84. fmt.Println(ret)
  85. }
  86. })
  87. c.Cb(<-c.ChanAsynRet)
  88. c.Cb(<-c.ChanAsynRet)
  89. c.Cb(<-c.ChanAsynRet)
  90. c.Cb(<-c.ChanAsynRet)
  91. // go
  92. s.Go("f0")
  93. wg.Done()
  94. }()
  95. wg.Wait()
  96. time.Sleep(10 * time.Second)
  97. // Output:
  98. // 1
  99. // 1 2 3
  100. // 3
  101. // 1
  102. // 1 2 3
  103. // 3
  104. }